2012-02-21 1 views
0

я могу передать IEnumerable в процедуру PLSQL использованиемКак выбрать только строки, где значение столбца присутствует в ассоциативном массиве?

Oracle.DataAccess.Client.OracleParameter

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

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

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

Может ли вариант SELECT ... WHERE IN сделать трюк?

+0

Если вы знаете, как это сделать для IEnumerable, не будет ли массив одинаковым? – Magnus

+1

Возможно, этот пример может помочь? http://www.asktheoracle.net/how-to-convert-local-plsql-table-to-table-i-can-select-from.html –

+0

@ Magnus Я думаю, вы меня неправильно поняли. Все, что я знаю, это IEnumerable, преобразованный в ассоциативный массив. Я не знаю, как делать WHERE IN с использованием этого массива. – BigOmega

ответ

0

Если бы вы могли найти способ конвертировать IEnumerable в вложенную таблицу ниже, то пример использования TABLE() Function and 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 Статья