2009-11-24 54 views
0

我有一個表,我想使用上下文變量從該表中進行選擇。上下文變量中的變量

表 KEY,DATA 'XX', 'BLABLA' 'YY', 'BLABLA' 'ZZ', 'BLABLA' 'AA', 'lkdjfa' ..... .. .. ..

我的選擇是:

SELECT * FROM表,其中的鍵不是在( 'XX', 'ZZ');

我的上下文變量的定義是一樣

變量:= '(' || '' 'XX' '' || ' '||' '' YY '' '||')' ;

DBMS__SESSION.SET_CONTEXT('key_context','KeyValues',Variable);

選擇sys_context('key_context','KeyValues')雙重結果;

結果 ( 'XX', 'ZZ')

所以我thouhgt這會工作:

SELECT * FROM表,其中的關鍵是不是在SYS_CONTEXT( 'key_context', '鍵值來');

有什麼建議嗎?

回答

1

你需要的是一個字符串傳遞到IN()。您可以通過下面的代碼做到這一點,從this AskTom question借:

create or replace type myTableType as table of varchar2(100); 
/

create or replace function in_list(p_string in varchar2) 
return myTableType 
as 
     l_data   myTableType := myTableType(); 
     l_string  long default p_string || ','; 
     l_n   number; 
begin 
     loop 
       exit when l_string is null; 
       l_data.extend; 
       l_n := instr(l_string, ','); 
       l_data(l_data.count) := substr(l_string, 1, l_n-1); 
       l_string := substr(l_string, l_n+1); 
     end loop; 
     return l_data; 
end; 
/

select * 
    from Table 
where key is not in (
     select * from THE (
      select cast(in_list(sys_context('key_context','KeyValues')) as mytableType) 
      from dual 
     ) 
     ); 

,不過也許這是simplier保持鍵在一個表...