Мой код .NET в настоящее время использует ODP.NET для многократного вызова хранимой процедуры для работы с различными строками во многих таблицах. В коде .NET есть массив строк, которые необходимо изменить. В каждом вызове изменяется только один параметр, и я хотел бы передать массив из .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);
Но этот синтаксис, похоже, не работает. И мне не удалось найти пример для Oracle, который сочетает в себе использование VARRAY и «IN» (или «ANY» и т. д.). И я видел несколько ответов о том, как это сделать с SQL Server, но я не уверен, как перевести это на Oracle.
Конечно, если есть какой-то другой способ передать массив из .NET хранимой процедуре для этого, это также ответит на мой вопрос. Я хочу повысить эффективность с помощью IN, поэтому что-то, что перебирает массив в PL/SQL (для вызова операторов UPDATE отдельно), вероятно, не поможет.