Използването на CSV е може би най-простият начин, ако приемем, че можете да сте 100% сигурни, че вашите елементи няма да съдържат низове.
Алтернативен и вероятно по-стабилен начин да направите това е да създадете персонализиран тип като таблица с низове. Ако предположим, че вашите низове никога не са били по-дълги от 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#.
Като настрана, в моята компания имаме редица от тези персонализирани типове, дефинирани като стандартни за списъци с низове, двойни, ints и така нататък. Ние също така използваме Oracle JPublisher, за да можем да картографираме директно от тези типове в съответните Java обекти. Огледах се набързо, но не можах да видя никакви преки еквиваленти за C#. Просто реших да го спомена, в случай че Java разработчиците попаднат на този въпрос.