私の.NETコードは現在、ODP.NETを使用してストアドプロシージャを何度も呼び出し、多くのテーブルのさまざまな行を操作しています。.NET コードには、変更する行の配列があります。各呼び出しで変更されるパラメーターは 1 つだけです。配列を .NET から PL/SQL に渡して、複数の行を操作したいと考えています (行数が変更されます)。
以下を使用して、配列を .NET から PL/SQL に正常に渡しました。
type number_arr is table of number(10) index by pls_integer;
PROCEDURE "BLAH" (foo IN number_arr);
number_arr は VARRAY と呼ばれていると思いますが、それについては肯定的ではありません。誰かが私を修正したい場合は、(コメントとして)修正してください。ただし、これは私の混乱の原因になる可能性があります。
しかし、現在、PL/SQL には、次のような多くの更新ステートメントがあります。
UPDATE t SET a = b WHERE a = foo;
foo が配列でない場合。私は今書きたい:
UPDATE t SET a = b WHERE a IN (foo);
しかし、この構文は機能していないようです。また、VARRAY と 'IN' (または 'ANY' など) を組み合わせて使用する Oracle の例を見つけることができませんでした。SQL Server でこれを行う方法についていくつかの回答を見てきましたが、それを Oracle に変換する方法がわかりません。
もちろん、これを行うために .NET からストアド プロシージャに配列を取得する他の方法があれば、それも私の質問に答えます。私は IN で効率を上げようとしているので、PL/SQL で配列を反復処理する (UPDATE ステートメントを個別に呼び出す) ことはおそらく役に立たないでしょう。