我在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
答案 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级深度”相关子查询但没有成功。但我找不到任何“坚实”的解释。