我正在尝试使用sys_context表单中的数据在WHERE子句中执行匹配。
我在上下文中添加的内容是('53','89'),这是我选择双重时返回的内容。
我的where语句是:sys_context中的to_char(location_id)('my_ctx','valoc')
由于我没有得到预期的响应,我猜我认为Oracle应该看到的实际上并不是它所看到的,但我不知道如何“看”从TOAD传递到处理器的内容
最初的形式是位于sys_context('my_ctx','valoc')中的location_id,其中valoc为(53,89),但也没有返回任何内容。我觉得我的问题可能没有答案。
答案 0 :(得分: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')
);