Как выбрать только те строки, в которых значение столбца присутствует в ассоциативном массиве? - PullRequest
0 голосов
/ 22 февраля 2012

Я могу передать IEnumerable в процедуру PLSQL, используя

Oracle.DataAccess.Client.OracleParameter

, и она, очевидно, преобразует его в ассоциативный массив.

Что я хочу сделать, это взять существующий запрос и обернуть его в выборку так, чтобы единственными строками, которые заканчиваются в наборе, были строки, содержащие значение, которое существует как один из элементов в массиве.

Какой синтаксис для этого?

Будет ли вариант SELECT ... WHERE IN сработать?

1 Ответ

0 голосов
/ 24 февраля 2012

Если бы вы могли найти способ преобразования IEnumerable во вложенную таблицу, приведенный ниже, пример с использованием TABLE() Function и Column_value будет работать для вас.Создайте вложенный тип таблицы на уровне схемы.

Create type ntt is table of NUMBER ;

И пример кода:

declare
  nt ntt := ntt(1, 2); --:= (1,2);
begin
  for i in (select rownum as id
                  from all_objects
         where rownum in (select column_value from TABLE(nt))) LOOP
 DBMS_OUTPUT.PUT_LINE('HERE IS = ' || i.id);
 END LOOP;
END;

Вывод:

HERE IS = 1
HERE IS = 2

Вы также можете заполнить вложенную таблицутип из ассоциативного массива внутри блока plsql.Это способ, которым я знаю об использовании элементов коллекции в WHERE .. IN Clause

...