使用 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 值

Oracle SQL FGA sys_context('userenv','current_sql') 被截断

使用正则表达式匹配和提取数据

Pandas:使用部分字符串匹配聚合不同数据帧的几列

数据结构与算法——字符串匹配问题(KMP算法)