要素自体に文字列が含まれていないことが 100% 確実であると仮定すると、CSV を使用するのがおそらく最も簡単な方法です。
これを行う代替の、おそらくより堅牢な方法は、文字列のテーブルとしてカスタム型を作成することです。文字列が 100 文字を超えることはないと仮定すると、次のようになります。
CREATE TYPE string_table AS TABLE OF varchar2(100);
その後、この型の変数をストアド プロシージャに渡して、直接参照できます。あなたの場合、次のようなものです:
FUNCTION EXECUTE_UPDATE(
identifierList string_table,
value int)
RETURN int
IS
BEGIN
[...other stuff...]
update table1 set col1 = col1 - value
where id in (select column_value from table(identifierList));
RETURN SQL%ROWCOUNT;
END
このtable()
関数は、カスタム型を単一の列「COLUMN_VALUE」を持つテーブルに変換し、他のテーブルと同様に扱うことができます (結合またはこの場合は副選択も同様です)。
この利点は、Oracle がコンストラクターを作成するため、ストアド プロシージャを呼び出すときに次のように簡単に記述できることです。
execute_update(string_table('foo','bar','baz'), 32);
C# からプログラムでこのコマンドを作成できると仮定しています。
余談ですが、私の会社では、文字列、double、int などのリストの標準として定義されたこれらのカスタム型が多数あります。また、Oracle JPublisherを使用して、これらの型から対応する Java オブジェクトに直接マップできるようにします。ちょっと調べてみましたが、C# に直接相当するものは見つかりませんでした。Java開発者がこの質問に出くわした場合に備えて、私はそれについて言及したいと思いました.