Oracle 使用sys_上下文匹配数据字符串

Oracle 使用sys_上下文匹配数据字符串,oracle,view,Oracle,View,我试图使用sys_上下文表单中的数据在WHERE子句中执行匹配 我在上下文中输入的是('53','89'),这是我在选择dual时返回的内容 我的where语句是:在sys\u上下文中的where to\u char(location\u id)('My\u ctx','valoc')) 由于我没有得到预期的响应,我猜我认为Oracle应该看到的不是它实际看到的,但我不知道如何“查看”从TOAD传递给处理器的内容 最初的形式是在sys_上下文中的location_id('my_ctx','val

我试图使用sys_上下文表单中的数据在WHERE子句中执行匹配

我在上下文中输入的是('53','89'),这是我在选择dual时返回的内容

我的where语句是:在sys\u上下文中的where to\u char(location\u id)('My\u ctx','valoc'))

由于我没有得到预期的响应,我猜我认为Oracle应该看到的不是它实际看到的,但我不知道如何“查看”从TOAD传递给处理器的内容


最初的形式是在sys_上下文中的location_id('my_ctx','valoc')和valoc中的(53,89),但也没有返回任何内容。我感觉到我的问题可能没有答案。

问题在于产生的
WHERE
子句相当于:

where to_char(location_id) in '('53','89')'
(为了清楚起见,没有将内部撇号加倍)

数据库将从上下文检索的内容视为单个值,而不是值列表

您可以使用
connectby
技巧来实现您的目标:

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

问题在于,由此产生的
WHERE
子句相当于:

where to_char(location_id) in '('53','89')'
(为了清楚起见,没有将内部撇号加倍)

数据库将从上下文检索的内容视为单个值,而不是值列表

您可以使用
connectby
技巧来实现您的目标:

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