Oracle 上下文变量中的变量

Oracle 上下文变量中的变量,oracle,Oracle,我有一个表,我想使用上下文变量从该表中进行选择 桌子 键、数据 “XX”,“布拉布拉” “yy”,“布拉布拉” “zz”,“布拉布拉” ‘aa’、‘lkdjfa’ ..... .... 我的选择是: 从键不在('XX','zz')的表中选择* 我对上下文变量的定义如下 变量:='('| |''xx''| |','| |''yy') DBMS_uuusession.SET_CONTEXT('key_CONTEXT','KeyValues',Variable) 从dual中选择系统上下文(“键上下

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

桌子 键、数据 “XX”,“布拉布拉” “yy”,“布拉布拉” “zz”,“布拉布拉” ‘aa’、‘lkdjfa’ ..... ....

我的选择是:

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

我对上下文变量的定义如下

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

DBMS_uuusession.SET_CONTEXT('key_CONTEXT','KeyValues',Variable)

从dual中选择系统上下文(“键上下文”、“键值”)结果

结果 ('XX','zz')

所以我认为这是可行的:

从键不在系统上下文中的表中选择*(“键上下文”,“键值”)


有什么建议吗?

有关类似的问题和几种解决方案,请参见此内容:


您需要的是将单个字符串传递到IN()。您可以通过借用以下代码来完成此操作:

但是把钥匙放在桌子里可能更简单

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
         )
       );