使用 sys_context 匹配数据字符串
Posted
技术标签:
【中文标题】使用 sys_context 匹配数据字符串【英文标题】:using sys_context to match data string 【发布时间】:2013-10-23 19:57:59 【问题描述】:我正在尝试使用 sys_context 形式的数据在 WHERE 子句中执行匹配。
我在上下文中输入的是 ('53','89'),这是我选择对偶时返回的内容。
我的where语句是:where to_char(location_id) in sys_context('my_ctx','valoc')
由于我没有得到预期的响应,我猜测我认为 Oracle 应该看到的并不是它实际看到的,但我不知道如何“查看”从 TOAD 传递给处理器的内容.
原始形式是 sys_context('my_ctx','valoc') 中的 location_id 和 valoc 中的 (53,89) ,但这也没有返回任何内容。我感觉我的问题可能没有答案。
【问题讨论】:
【参考方案1】:问题是生成的WHERE
子句等价于:
where to_char(location_id) in '('53','89')'
(为了清楚起见,没有将内撇号加倍)
数据库将从上下文中检索到的内容视为单个值,而不是值列表。
您可以使用CONNECT BY
技巧来实现您的目标:
SELECT 1
FROM dual
WHERE '53' IN ( -- replace '53' with TO_CHAR(location_id)
SELECT regexp_substr('53,89', '[0-9]*', 1, level) -- replace '53,89' with sys_context('my_ctx','valoc')
FROM dual
CONNECT BY regexp_substr('53,89', '[0-9]*', 1, level) IS NOT NULL -- replace '53,89' with sys_context('my_ctx','valoc')
);
【讨论】:
以上是关于使用 sys_context 匹配数据字符串的主要内容,如果未能解决你的问题,请参考以下文章
sys_context () 这个函数 是做啥用的,举个例子。v$session里的audsid 是干啥用的。
Oracle 11g - 通过 user_id 跨池连接共享 Sys_Context 值