下面的查询在 10g (10.2.0.4) 中不起作用,显示 ORA-00904: "A","TEMP_APPL_ID" : invalid identifie
Posted
技术标签:
【中文标题】下面的查询在 10g (10.2.0.4) 中不起作用,显示 ORA-00904: "A","TEMP_APPL_ID" : invalid identifier【英文标题】:Below query is not working in 10g (10.2.0.4) showing 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 服务器中正确执行。
请帮忙。
阿塔努·梅蒂
【问题讨论】:
【参考方案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/3405285https://community.oracle.com/thread/380604
我在 Oracle 10g/11g 中尝试了“2 级深度”相关子查询,但没有成功。但我找不到任何“可靠”的解释。
【讨论】:
以上是关于下面的查询在 10g (10.2.0.4) 中不起作用,显示 ORA-00904: "A","TEMP_APPL_ID" : invalid identifie的主要内容,如果未能解决你的问题,请参考以下文章
Datetime BETWEEN 语句在 SQL Server 中不起作用
自动 CSV 文件生成,在 Oracle 10g 中具有不同列数的两个标题级别的标题
Oracle 10g 10.2.0.4的group by BUG |ORA-00979 not a GROUP BY expression|