2009-05-08 11 views
1

、私は次のように文を準備することができます:「where col in?」の右側にバインドコレクションをバインドします。 OracleのOCIで句

select * from t where pk in :1 

とのためのVARRAYコレクションをバインド:1プレースホルダ。

私は、次のいずれかを使用しない限り、私は策に動作し、SQLiteの等価を行うにはどのような方法が表示されない:1

  • は、PK =トンから選択*準備 代わり

    と私のコレクション内のすべてのPKSと、このN回実行し、手動でNからの行の「労働組合は、」私のコレクションを入れ

  • を照会します一時テーブルにpkを入れ、tで結合する。

  • テキストで置き換えます.1つはコレクション値で置き換え、準備済みのステートメントの利点を無効にします。

何か不足していますか?そして、OCIのコレクション・バインディングをエミュレートするために推奨される方法は何ですか?ありがとう、-DD

+0

私が思っていたほどOracleではそれほど簡単ではありませんでしたが、それでも可能です。使用する適切なOracle構文については、http://goo.gl/seS4pを参照してください。 – ddevienne

答えて

3

ああ、sqliteはスカラーへのバインディングしかサポートしていないので、パラメータをコレクションにバインドすることはできません。コレクタ内のアイテムの数が制限されている場合は、 'IN (?, ?, ?, ?)' [[最大4アイテムとする]]という文を準備し、配列内の実際のスカラーをバインドします(4未満の場合は最後のバインドを繰り返しバインドするか、プレースホルダとして「不可能」であることがわかっている値をバインドします)。さもなければ、あなたがスケッチしているアプローチは実際には多かれ少なかれ気になるものです。

+0

ありがとう、これを考えなかった。低基数のコレクションの場合は、最も簡単で最速の場合があります。 N個までのプレースホルダーを持つ準備済みステートメントを1つ用意できます。たとえば、要素が増えたときなどに、もう1つは結合を実行できます。乾杯、--DD – ddevienne

関連する問題