いくつかの追加オブジェクト (コレクション型と関数) の作成に制限がないと仮定すると、リストを解析して、クエリで参照できるコレクションにすることができます。Tom Kyte は変数 "IN" リストスレッドでこれについて良い議論をしています。
たとえば、 Tom のmyTableType
andin_list
関数を使用する場合
SQL> create or replace type myTableType as table
of varchar2 (255);
2 /
Type created.
ops$tkyte@dev8i> create or replace
function in_list( p_string in varchar2 ) return myTableType
2 as
3 l_string long default p_string || ',';
4 l_data myTableType := myTableType();
5 n number;
6 begin
7 loop
8 exit when l_string is null;
9 n := instr( l_string, ',' );
10 l_data.extend;
11 l_data(l_data.count) :=
ltrim( rtrim( substr( l_string, 1, n-1 ) ) );
12 l_string := substr( l_string, n+1 );
13 end loop;
14
15 return l_data;
16 end;
17 /
そうすれば、比較的簡単に等式を検索できます。
WHERE product_group IN (SELECT column_value
FROM TABLE( in_list( strProductGroup )))
LIKE
しかし、リスト内でa を実行できないため、少し難しい aを実行したいとしますLIKE
。ただし、次のようなことができます
select *
from emp e,
(select '^' || column_value search_regexp
from table( in_list( 'KIN,BOB' ))) a
where regexp_like( e.ename, a.search_regexp )
これにより、 がまたはで始まるEMP
従業員がテーブルから検索されます。デフォルトのテーブルでは、 「KING」である行が 1 行だけ返されます。ENAME
KIN
BOB
SCOTT.EMP
ENAME