저장 프로 시저 및 SQLite를 작성 하시겠습니까?


답변:


217

SQLite는 높은 동시성, 세분화 된 액세스 제어, 다양한 내장 함수, 저장 프로 시저 , 난해한 SQL 언어 기능, XML 및 / 또는 Java 확장, tera- 등 일부 사람들이 유용하다고 생각하는 다른 특성을 희생해야했습니다. 또는 페타 바이트 확장 성 등

출처 : SQLite의 적절한 사용


3
SQLite와 동등한 SQL CLR 함수를 사용하여 동일한 목표를 달성 할 수 있습니다 ( stackoverflow.com/questions/172735/… ).
devinbost

@bostIT 추가해 주셔서 감사합니다. System.Data.SQLite에 대한 참조 system.data.sqlite.org/index.html/doc/trunk/www/index.wiki
h3xStream

91

답변 : 아니오

이유는 ... 데이터베이스에 procs를 저장 한 주요 이유는 SQL 엔진과 동일한 프로세스에서 SP 코드를 실행하기 때문입니다. 이는 네트워크 연결 서비스로 작동하도록 설계된 데이터베이스 엔진에 적합하지만 SQLite가 별도의 SQL 엔진 프로세스가 아닌 응용 프로그램 프로세스에서 DLL로 실행된다는 점을 감안할 때 SQLite의 필요성은 훨씬 적습니다. 따라서 호스트 언어로 된 SP 코드를 포함하여 모든 비즈니스 로직을 구현하는 것이 더 합리적입니다.

그러나 호스트 언어 (PHP, Python, Perl, C #, Javascript , Ruby 등) 에서 사용자 정의 함수사용 하여 SQLite를 확장 할 수 있습니다 . 그런 다음 이러한 사용자 정의 기능을 SQLite 선택 / 업데이트 / 삽입 / 삭제의 일부로 사용할 수 있습니다. 나는 한 C #으로 이런 짓을 사용하여 DevArt의 SQLite는 암호 해시를 구현합니다.


16
명확히하기 위해 ... 나는 SQLite에서 SP를 구현 할 이유가 없다고 말하지는 않습니다. 다른 DB 엔진보다 SP를 훨씬 적습니다.
Tony O'Hagan

4
저장 프로 시저가있는 주요 이유는 SQL 삽입을 방지하기위한 것입니다. 그러나 다른 많은 이유가 있습니다. 예를 들어 관련 쿼리를 sqlite 파일에 포함시켜 공유 할 수 있습니다. SQL 엔진의 컨텍스트에서 실행되는 표준 쿼리와 SP를 선택하는 것에는 전혀 차이가 없습니다. 둘 다 SQL 엔진에서 실행 중입니다.
Dan

4
@Dan 첫째, SP는 SQL 인젝션을 생각하기 오래 전에 존재했습니다. 이 공격에 대해 안전한 수천 개의 SQL 기반 앱이 앱없이 구축되었습니다. 또한 SQL 주입에 취약한 안전하지 않은 SP (일반적으로 동적 SQL 기반)를 코드 검토했습니다. 그래서 나는 이것이 주된 이유가 아닙니다. 이 공격을 막을 수있는 다른 방법이 많이 있습니다.
Tony O'Hagan

3
@Dan 대부분의 SQL 엔진은 클라이언트 / 서버 (SQLite가 아님)입니다.이를 위해 비즈니스 로직을 어디에 둘 것인지 결정할 때 성능이 핵심 문제입니다. SQL 엔진에서 SP 내부의 OR 또는 조건부 코드를 쿼리하거나 비즈니스 논리를 실행하면 (1) 데이터 검색 성능을 향상시키고, (2) 네트워크 트래픽을 줄이며 (3) 앱 계층 메모리 사용량을 줄입니다 (4) 캐시 쿼리 실행 계획 (사전 컴파일) SP). 대부분의 앱 개발자는 비즈니스 로직을 SQL 엔진 외부로 옮기는 것을 선호합니다 (물론 쿼리는 아닙니다!). SQLite는 대한이는 명령형의이 클라이언트 / 서버를 지원하지 않기 때문에.
Tony O'Hagan

고마워, 토니 SQLite에 절차가 없지만 내장 함수 ( sqlite.org/lang_corefunc.html ) 가 왜 있는지 궁금합니다 . postgresql과 같은 클라이언트 서버 RDBMS의 경우 기능과 프로 시저가 모두 서버 측에 저장되어 있습니까? SQLite는 서버리스이므로 SQLite에 procedure가 없으면 같은 이유로 함수도 없어야합니까?
Tim

17

여전히 관심이 있다면 Chris Wolf는 저장 프로 시저를 사용하여 SQLite의 프로토 타입 구현을 만들었습니다. 자세한 내용은 블로그 게시물 : SQLite에 저장 프로 시저 추가


5
기사는 지금 죽었지 만 프로젝트는 github.com/wolfch/sqlite-3.7.3.p1에 있습니다. readme 파일은이 파일이 프로덕션 준비 상태가 아니거나 실험용이 아님을 나타냅니다. 개념 증명에 더 가깝습니다.
pqsk 2016 년

7

그러나 AFTER INSERT 트리거를 사용하여 fake-sp라는 전용 테이블을 사용하여 가짜를 만들 수 있습니다. 전용 테이블 행에는 가짜 sp에 대한 매개 변수가 포함되어 있으며 결과를 반환해야하는 경우 두 번째 (poss. temp) 테이블 (가상 sp-sp 관련 이름 포함)을 사용하여 해당 결과를 포함 할 수 있습니다. 두 개의 쿼리가 필요합니다. 첫 번째는 가짜 sp- 트리거 테이블에 데이터를 삽입하고, 두 번째는 비어 있거나, 잘못되었을 경우 메시지 필드를 가질 수있는 fake-sp-results-table에서 SELECT입니다. .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.