Как использовать оператор SQL 'IN' (или 'ANY') с VARRAY в PL / SQL

Мой код .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), вероятно, не поможет.

5
задан Allan 15 July 2011 в 20:20
поделиться