2012-03-02 12 views
11

sqliteデータベースファイルにあまりに多くのデータを挿入すると、「複合SELECTの用語が多すぎます」というエラーが発生します。私は "insert into ... select ... union select ... union ..."を使用します。私はそれがあまりにも多くの選択ステートメントを知っているが、私の質問は:化合物のSELECTステートメント内の用語の最大数は何ですか?SQLiteエラー:複合語の用語が多すぎます。

答えて

24

複合SELECTステートメントは、演算子UNION、UNION ALL、EXCEPT、またはINTERSECTによって接続された2つ以上のSELECTステートメントです。複合SELECT内の各個別SELECT文を「用語」と呼びます。

SQLiteのコードジェネレータは、再帰アルゴリズムを使用して複合SELECT文を処理します。したがって、スタックのサイズを制限するために、化合物SELECTの項数を制限します。最大限の語数はSQLITE_MAX_COMPOUND_SELECTで、デフォルトは500です。実際には、化合物の中の用語の数が一桁を超えることはほとんどありませんので、これは多額の配分だと思います。

複合SELECT条件の最大数は、実行時にsqlite3_limit(db、SQLITE_LIMIT_COMPOUND_SELECT、size)インターフェイスを使用して下げることができます。詳細は

これをチェックしてください... sqliteの中 http://www.sqlite.org/limits.html

+0

はありがとうございました。私のSELECTステートメントは500を超えました! –

+0

hmmそれは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 value2 UNION SELECT value3 ... UNION SELECT value999 – sdjuan

-6

使用するSELECTの数に制限はありません。列のリストがINSERT列と一致するかどうかを確認するだけです。

+2

select文のPLSの数には限界があるが、それを正しく確認... – shofee