1

我正在尝试使用 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) ,但这也没有返回任何内容。我感觉我的问题可能没有答案。

4

1 回答 1

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')
);
于 2013-10-23T20:15:30.293 回答