我有一个表,我想使用一个上下文变量从该表中进行选择。
表 关键,数据 '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');
有什么建议吗?
答案 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以了解类似问题和几个解决方案: