以下查询无法在10g(10.2.0.4)中显示ORA-00904:" A"," TEMP_APPL_ID" : 不合法的识别符

时间:2014-11-10 12:07:08

标签: oracle

我在Oracle 10g 10.2.0.4服务器中遇到此问题,在执行以下查询时显示错误 ORA-00904:“A”,“TEMP_APPL_ID”:无效标识符

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 服务器中正确执行。

请帮忙。

Atanu Maity

1 个答案:

答案 0 :(得分:3)

你可以试试这个:

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

  

子查询引用a时,Oracle会执行相关子查询   父语句中引用的表中的列。相关的   对于父级处理的每一行,子查询被计算一次   声明。父语句可以是SELECT,UPDATE或DELETE   言。

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

  

Oracle在嵌套子查询时执行相关子查询   引用一个引用父语句 any的表中的列   子查询上方的级别数。父语句可以是a   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级深度”相关子查询但没有成功。但我找不到任何“坚实”的解释。