要素自体に文字列が含まれないことを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開発者がこの質問に出くわした場合に備えて、言及したいと思いました。