0

Oracle では、IN句は 1000 を超えるエントリを除外しません。

Select Name From Student Where Student_ID IN (1,2,3,4,5,...1000,1001,1002,1003,...)

は受け入れられません。次のように分類されます。

Select Name From Student Where Student_ID IN (1,2,3,4,5,...1000) OR 
Student_ID IN (1001,1002,1003,...)

今、私はこれらの ID をカンマ区切りの文字列として取得します1,2,3,4,5,...1000,1001,1002,1003,...。これをより小さな部分に分割するためのより速い方法は何でしょうか?

4

1 に答える 1

0

SELECTまず、内部にデータを含まないステートメントの長さを特定しINます (これらのコンマ区切りの数字を IN 文字列と呼びましょう)

Len ("Select Name From Student Where Student_ID IN ()")

今、あなたの限界は1000- Len ("Select...")

次に、にInStrRev("1,2,3,4,5...",",",limit)挿入する IN 文字列からコンマ区切りの数値のスニプレットを取得しますが、Selectそれでも 1000 文字未満になります)。挿入されたスニペットを IN 文字列から削除します (ループを繰り返す前に、IN 文字列から先頭のコンマを削除することを忘れないでください)。

次に、IN 文字列がなくなるまでタスクを繰り返します。2 回目以降の実行では制限を変更することを忘れないでください。完全な選択ではなく を使用するためですOR Student_ID INが、ロジックは同じままです。

于 2013-01-04T17:22:16.220 に答える