Context变量中的变量

时间:2009-11-24 14:50:24

标签: oracle

我有一个表,我想使用一个上下文变量从该表中进行选择。

表 关键,数据 'XX','BLAbla' 'yy','blaBla' 'zz','bLaBla' 'aa','lkdjfa' ..... .... ..

我的选择是:

从表中选择*,其中键不在('XX','zz');

我对上下文变量的定义类似于

变量:='('||'''xx'''||','||'''yy'''||')';

DBMS__SESSION.SET_CONTEXT('key_context','KeyValues',变量);

选择sys_context('key_context','KeyValues')来自dual的结果;

结果 ('XX','zz')

所以我认为这会奏效:

从表中选择*,其中键不在sys_context中('key_context','KeyValues');

有什么建议吗?

2 个答案:

答案 0 :(得分: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
         )
       );

但将密钥保存在表格中可能更简单......

答案 1 :(得分:0)

请参阅此SO以了解类似问题和几个解决方案: