【问题标题】:using sys_context to match data string使用 sys_context 匹配数据字符串
【发布时间】:2013-10-23 19:57:59
【问题描述】:

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

【问题讨论】:

    标签: oracle view


    【解决方案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')
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-29
      • 1970-01-01
      • 2019-09-03
      • 1970-01-01
      • 1970-01-01
      • 2014-12-30
      • 1970-01-01
      相关资源
      最近更新 更多