【问题标题】:Below query is not working in 10g (10.2.0.4) showing ORA-00904: "A","TEMP_APPL_ID" : invalid identifier下面的查询在 10g (10.2.0.4) 中不起作用,显示 ORA-00904: "A","TEMP_APPL_ID" : invalid identifier
【发布时间】:2014-11-10 12:07:08
【问题描述】:

我在 Oracle 10g 10.2.0.4 服务器中遇到了这个问题,在执行下面的查询时显示错误 ORA-00904: "A","TEMP_APPL_ID" : invalid identifier

Update PO_AGENCY_TEMP a  set 
    (massag_value)=(
       SELECT REGEXP_SUBSTR(str,'\d+',1,1) NUM
        FROM
         (SELECT REGEXP_REPLACE(unit_code,'([A-Z]+-\d+-[A-Z]+)','',4,4,'i') str
         FROM PO_AGENCY_TEMP b where a.temp_appl_id = b.temp_appl_id));

而此查询在 oracle 10g 10.2.0.2 服务器中正确执行。

请帮忙。

阿塔努·梅蒂

【问题讨论】:

    标签: oracle


    【解决方案1】:

    你可以试试这个:

    Update PO_AGENCY_TEMP a 
       set massag_value=(SELECT REGEXP_SUBSTR(REGEXP_REPLACE(unit_code,'([A-Z]+-\d+-[A-Z]+)','',4,4,'i'),'\d+',1,1) num
             FROM PO_AGENCY_TEMP b where a.temp_appl_id = b.temp_appl_id);
    

    据我所知,嵌套子查询的最大级别存在限制,您可以在其中使用父查询中的列。在 Oracle 中等于 1。

    然而情况真的很奇怪:

    1) 它在 Oracle 9i 中不起作用:
    https://docs.oracle.com/cd/B10501_01/server.920/a96540/queries8.htm

    当子查询引用一个 父语句中引用的表中的列。一个相关的 子查询为父处理的每一行评估一次 陈述。父语句可以是 SELECT、UPDATE 或 DELETE 声明。

    2) 然后它开始在Oracle 10g 中工作:
    https://docs.oracle.com/cd/B13789_01/server.101/b10759/queries007.htm

    当嵌套子查询时,Oracle 会执行相关子查询 从引用父语句的表中引用列 any 子查询上方的级别数。父语句可以是 嵌套子查询的 SELECT、UPDATE 或 DELETE 语句。一种 相关子查询对由 家长声明。 Oracle 解析子查询中的不合格列 通过查看子查询中命名的表,然后查看表 在父语句中命名。

    3) Oracle 11g 状态与 Oracle 10g 相同:
    https://docs.oracle.com/cd/B28359_01/server.111/b28286/queries007.htm#SQLRF52340

    不过人家说不行:
    https://community.oracle.com/message/3405285
    https://community.oracle.com/thread/380604

    我在 Oracle 10g/11g 中尝试了“2 级深度”相关子查询,但没有成功。但我找不到任何“可靠”的解释。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多