使用sys_context匹配数据字符串

时间:2013-10-23 19:57:59

标签: oracle view

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

1 个答案:

答案 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')
);