更新时标识符无效 (Oracle)

     2023-03-27     213

关键词:

【中文标题】更新时标识符无效 (Oracle)【英文标题】:Invalid Identifier on Update (Oracle) 【发布时间】:2015-10-13 16:48:39 【问题描述】:

我尝试执行以下命令:

UPDATE DB_TEST.STOCK_ITEMS
   SET STATUS = (SELECT *
                   FROM (SELECT STOCK_ITEM_STATUS
                           FROM DB_TEST.STOCK_ITEMS_HISTORY
                          WHERE STOCK_ITEM_ID = DB_TEST.STOCK_ITEMS.ID
                          ORDER BY CHANGED_ON DESC, ID DESC)
                  WHERE ROWNUM <= 1)
 WHERE EXISTS (SELECT *
                 FROM DB_TEST.STOCK_ITEMS_HISTORY
                WHERE STOCK_ITEM_ID = DB_TEST.STOCK_ITEMS.ID);

但我得到了错误:

SQL-Error: ORA-00904: "DB_TEST"."STOCK_ITEMS"."ID": invalid identifier

我查看了 Oracle 错误,但我得到的只是我应该使用了错误或缺少的列名,但 DB_TEST.STOCK_ITEMS.ID 字段确实存在。

还有哪些其他原因会导致此错误?

【问题讨论】:

你不能用一组数据更新一个列SET STATUS = (SELECT * ... ) 没有数据库会知道该字段上放什么数据。您可能正在寻找这个:dba.stackexchange.com/a/3034/42478 @JorgeCampos 。 . .阅读查询。子查询只返回一个值。 【参考方案1】:

Oracle 将表的范围限制为一级子查询。这是一种使用keep 解决您的问题的方法:

UPDATE DB_TEST.STOCK_ITEMS
  SET STATUS = (SELECT MAX(STOCK_ITEM_STATUS) KEEP (DENSE_RANK FIRST ORDER BY CHANGED_ON DESC, ID DESC)
                FROM DB_TEST.STOCK_ITEMS_HISTORY
                WHERE STOCK_ITEM_ID = DB_TEST.STOCK_ITEMS.ID
               )
  WHERE EXISTS (SELECT 1
                FROM DB_TEST.STOCK_ITEMS_HISTORY
                WHERE STOCK_ITEM_ID = DB_TEST.STOCK_ITEMS.ID
               );

【讨论】:

“OVER”是“FIRST”和“ORDER”之间的错字吗?它会引发错误。 @Palmi 。 . .是的,是的。

ORA-00904 使用 CASE 语句更新表时标识符无效

】ORA-00904使用CASE语句更新表时标识符无效【英文标题】:ORA-00904invalididentifierwhileupdatetableusingCASEstatement【发布时间】:2018-05-2211:13:19【问题描述】:我创建了一个存储过程,在其中我使用CASE语句更新了一个表。user_in是存储过程... 查看详情

尝试在 Oracle Sql 中将列值更改为默认值时标识符无效

】尝试在OracleSql中将列值更改为默认值时标识符无效【英文标题】:invalididentifierwhentryingtoaltercolumnvaluetodefaultinOracleSql【发布时间】:2017-01-0520:08:32【问题描述】:我已经创建了这个序列CREATESEQUENCEstud_seqSTARTWITH1000INCREMENTBY1MAXVALUE... 查看详情

过程中 UPDATE oracle 中的变量:标识符无效

】过程中UPDATEoracle中的变量:标识符无效【英文标题】:VariableinUPDATEoracleinprocedure:invalididentifier【发布时间】:2012-10-2208:58:04【问题描述】:我不明白为什么服务会抱怨Fehler(36,11):PL/SQL:ORA-00904:“FOUND_VP”:标识符无效变量在... 查看详情

为啥我会收到:[Oracle][ODBC][Ora]ORA-00904:标识符无效

】为啥我会收到:[Oracle][ODBC][Ora]ORA-00904:标识符无效【英文标题】:WhyamIgetting:[Oracle][ODBC][Ora]ORA-00904:invalididentifier为什么我会收到:[Oracle][ODBC][Ora]ORA-00904:标识符无效【发布时间】:2011-04-1716:26:14【问题描述】:当我清楚地识... 查看详情

hibernate自动更新表出错建表或添加列,提示标识符无效

  如Oracle数据库下报错:  createtabledb_meta_web.user(idvarchar2(255char)notnull,accountvarchar2(255char),departmentvarchar2(255char),emailvarchar2(255char),mobilevarchar2(255char),namevarchar2(255char),passw 查看详情

Oracle 数据库列定义不明确/标识符无效

】Oracle数据库列定义不明确/标识符无效【英文标题】:Oracledatabasecolumnambiguouslydefined/invalididentifier【发布时间】:2019-07-3009:39:39【问题描述】:我尝试编写SQL语句以从某些表中进行选择。但是当我运行它时,我得到一个错误,我... 查看详情

嵌套 WITH 子查询中的 Oracle SQL 无效标识符错误

】嵌套WITH子查询中的OracleSQL无效标识符错误【英文标题】:OracleSQLinvalididentifiererrorinnestedWITHsubquery【发布时间】:2016-07-2918:27:37【问题描述】:您将在下面找到三个示例表和数据以及一个查询。此示例可能看起来有些做作,但... 查看详情

Oracle,无效标识符错误

】Oracle,无效标识符错误【英文标题】:Oracle,invalididentifiererror【发布时间】:2012-11-2817:25:59【问题描述】:我有这个查询应该:创建一个标识库存中不同项目的列表每个选项可用的颜色数量表但我收到一条错误消息:命令行错... 查看详情

oracle查看无效标识符

】oracle查看无效标识符【英文标题】:Oracleviewinvalididentifier【发布时间】:2015-04-2223:02:40【问题描述】:我必须执行创建一个视图,显示数据库中每部电影的总租金收入原来如此CREATEORREPLACEVIEWMovieIncomeASSELECTs.movie_copy_id,SUM(S.PRICE)... 查看详情

Oracle 11g 无效标识符错误

】Oracle11g无效标识符错误【英文标题】:Oracle11ginvalididentifiererror【发布时间】:2012-09-1012:51:28【问题描述】:此查询适用于OracleDatabase10gEnterpriseEditionRelease10.2.0.2.0-64bi但不是OracleDatabase11g版本11.2.0.1.0-64位生产select*frominb_dosya_turudo... 查看详情

Oracle 无效标识符错误

】Oracle无效标识符错误【英文标题】:OracleInvalidIdentifierError【发布时间】:2015-05-1719:23:47【问题描述】:我知道以前有人问过这个问题,但我查看了其他问题,但我的查询仍然无效。我有一张包含过去100年左右的MLB击球统计数... 查看详情

Oracle 日期比较(无效标识符)

】Oracle日期比较(无效标识符)【英文标题】:Oracledatecompare(invalididentifier)【发布时间】:2011-05-2711:54:44【问题描述】:我有这个问题:SELECTTO_CHAR(HON.CREATE_DT,\'DD-MM-YYYY\')asCREATE_DT,HON.ACCOUNT_NO,(SELECTTO_CHAR(CURRENT_DATE-INTERVAL\'7\'DAY,\'DD- 查看详情

oracle 忽略子查询中的无效标识符错误

】oracle忽略子查询中的无效标识符错误【英文标题】:oracleignoresinvalididentifiererrorinsubquery【发布时间】:2018-09-1716:21:40【问题描述】:我不明白为什么以下查询有效,尽管子查询给出了“无效标识符”错误。SELECT*FROMaircraftWHEREair... 查看详情

ORACLE ORA-00904: 无效标识符错误

】ORACLEORA-00904:无效标识符错误【英文标题】:ORACLEORA-00904:invalididentifiererror【发布时间】:2020-08-2721:49:25【问题描述】:尝试获取倒数第二部分的状态,但在子查询中的my_p上识别出无效。怎么了?SELECTpartASmy_p,CASEWHEN((SELECTMAX(stat... 查看详情

ORACLE: ORA-00904: : 无效的标识符

】ORACLE:ORA-00904::无效的标识符【英文标题】:ORACLE:ORA-00904::invalididentifier【发布时间】:2011-09-2108:06:35【问题描述】:我创建了以下选择:selecte.first_name,e.last_name,(selectjobname_idfrom(selectj.id,j.jobname_id,first_value(j.jobname_id)over(order 查看详情

Oracle 触发器错误,标识符无效

】Oracle触发器错误,标识符无效【英文标题】:ErrorwithOracletrigger,invalididentifier【发布时间】:2012-03-2609:14:04【问题描述】:我的以下DML语句运行良好,我尝试将其设置为触发器,但它不起作用。DML声明UPDATEHOLIDAY_RESERVATIONRSETSUBTOT... 查看详情

ORA-00904 无效标识符 -- 动态 Oracle 函数

】ORA-00904无效标识符--动态Oracle函数【英文标题】:ORA-00904InvalidIdentifier--DynamicOraclefunction【发布时间】:2016-11-2117:47:44【问题描述】:createorreplaceFUNCTIONJDT_UDC_Desc(V_SYINVARCHAR2,V_RTINVARCHAR2,V_KYINVARCHAR2)RETURNVARCHAR2ASV_DL01VA 查看详情

python调用oracle函数ORA-00904无效标识符

】python调用oracle函数ORA-00904无效标识符【英文标题】:pythoncallingoraclefunctionORA-00904invalididentifier【发布时间】:2015-06-1621:34:21【问题描述】:我正在编写一些Python代码来调用Oracle服务器上的函数。这是查询字符串,直接从PyDev复... 查看详情