2016-12-22 14 views
1

配列に値を格納してwhere句で使用します。オラクルwhere句の配列を使用する方法?

このよう

:このような

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 ;