2012-03-02 2 views
11

sqlite 데이터베이스 파일에 너무 많은 데이터를 삽입하면 "복합 SELECT에 용어가 너무 많습니다"라는 오류가 발생합니다. "insert into ... select ... union select ... union ..."을 사용합니다. 나는 그것이 너무 많은 select 문을 알고 있지만 내 질문은 : 복합 SELECT 문에서 용어의 최대 개수는 얼마입니까?SQLite 오류 : 복합어에 너무 많은 용어가 있음

답변

24

복합 SELECT 문은 UNION, UNION ALL, EXCEPT 또는 INTERSECT 연산자로 연결된 두 개 이상의 SELECT 문입니다. 복합 SELECT 내 각 개별 SELECT 문을 "용어"라고합니다.

SQLite의 코드 생성기는 재귀 알고리즘을 사용하여 복합 SELECT 문을 처리합니다. 따라서 스택의 크기를 제한하기 위해 복합 SELECT의 용어 수를 제한합니다. 최대 용어 수는 SQLITE_MAX_COMPOUND_SELECT이며, 기본값은 500입니다. 실제로는 화합물 선택 항목의 수가 한자리 수를 초과하는 것을 거의 볼 수 없으므로 이것이 많은 할당이라고 생각합니다.

sqlite3_limit (db, SQLITE_LIMIT_COMPOUND_SELECT, 크기) 인터페이스를 사용하여 최대 SELECT 수를 런타임에서 낮출 수 있습니다. SQLite는의

자세한 내용은이를 확인하시기 바랍니다

... http://www.sqlite.org/limits.html

+0

너무 감사합니다 확인을 선택 제표에 수에 한계가있다. 내 SELECT 문이 500을 통과했습니다! –

+0

흠, 500을 넘으면 안된다! :) .. – shofee

+5

@shobi 이전 버전의 sqlite (<3.7.11)는 INSERT INTO tablename (columnname) VALUES (value1), (value2)를 사용하여 다중 행 삽입을 허용하지 않기 때문에 종료하기가 쉽습니다 INSERT INTO tablename (columnname) SELECT value1 AS 'columnname' UNION SELECT 값 2 UNION SELECT 값 3 UNION SELECT 값 999 – sdjuan

-6

사용하는 SELECT 수에는 제한이 없습니다. 열의 목록이 INSERT 열과 일치하는지 여부를 확인하기 만하면됩니다.

+2

PLS가 제대로 ... – shofee

관련 문제