首页 文章

Context变量中的变量

提问于
浏览
0

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

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

我的选择是:

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

我对上下文变量的定义是这样的

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

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

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

结果('XX','zz')

所以我认为这会奏效:

select * from Table where key不在sys_context中('key_context','KeyValues');

有什么建议?

2 回答

  • 0

    你需要的是将一个字符串传递给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

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

相关问题