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