2016-12-22 2 views
1

Я хочу сохранить значение в массиве, а затем использовать его в where where.Oracle, как использовать массив в where clause?

Как это:

SELECT ... ... 
    FROM myTable 
WHERE (myTable.id, myTable.type) 
    IN (SELECT * 
      FROM table(array_collection) 
     ) 

array_collection значение, как это:

(('1','N'), 
    ('2','N'), 
    ('3','Y')) 

И там каким-либо образом не создать уровне схемы table типа, чтобы сделать это?

+0

Эй, пожалуйста, вы можете быть более конкретным? Как выглядит «таблица»? – HeadOverFeet

+0

Если вы не хотите создавать тип уровня схемы, я думаю, вы должны создать функцию, которая будет проверять ваши значения и использовать их в предикате WHERE. Но у него не будет хорошей производительности – SkyWalker

ответ

1

Я хочу сохранить значение в массиве.

Это, как вы сохраняете значение:

CREATE OR REPLACE TYPE array_item IS object(id NUMBER, TYPE varchar2(3)); 

CREATE OR REPLACE TYPE array_collection IS VARRAY(10) OF array_item; 


declare 
--Initialization 
var_array array_collection:=array_collection(); 
begin 
    ---Storing 3 elements 
var_array.extend(3); 
var_array(1):= array_item(1,'N'); 
var_array(2):= array_item(2,'N'); 
var_array(3):= array_item(3,'Y'); 

for i in 1..var_array.count 
loop 
    dbms_output.put_line(var_array(i).id ||' '|| var_array(i).TYPE); 
end loop; 

end; 

Вы можете использовать как:

SELECT ... ... 
    FROM myTable 
WHERE (myTable.id, myTable.type) MEMBER OF var_array ;