文档章节

Oracle MERGE raise ORA-00904 无效的标识符

张乐1024
 张乐1024
发布于 2015/12/19 16:36
字数 653
阅读 139
收藏 0

今天在开发过程中遇到了一个很奇怪的错误,java.sql.SQLException: ORA-00904: "T1"."C_BALE": 无效的标识符!

出现这个错误的时候我仅仅是把原有语句中的条件T1.ID = T2.ID改为了T1.C_BALE = T2.C_BALE,其中T1为实体表-原表、T2为虚拟表-新表。

于是开始分析问题原因:

  1. 既然报错无效的标示符,那么首先确认表中是否有该字段。

    经确认该字段一直存在,并且在语句的UPDATE SET部分以及INSERT 部分都存在针对该字段的操作,所以字段不存在原因排除

  2. 程序使用数据库与PL SQL使用的数据库是否一致

    经确认为同一个数据库,原因排除

  3. 字符大小写是否敏感

    全部转换为大写后问题依旧,原因排除(ORACLE 在实际执行脚本之前都会把字符转换为大写,所以ORACLE不敏感大小写)

  4. 语法是否书写错误

    在PL SQL中针对表T1写了个最简单的例子,验证通过,证明语法没问题

    MERGE INTO B_TBG_TRADE_HVIDATA_FINAL T1

    USING (SELECT 1 ID, '1110003' C_BALE FROM DUAL) T2

    ON (T1.C_BALE = T2.C_BALE)

    WHEN MATCHED THEN

      UPDATE

        SET ID = 9999

    WHEN NOT MATCHED THEN

      INSERT (ID, C_BALE)

      VALUES

      (999, '00000111111')

  5. 是否因JDK版本不支持导致

    因为实际环境中的语句是用?赋值,并且变量比较多,所以我才迟迟不想直接在PL SQL中执行java中的脚本。现在能排除的原因都已经排除了,所以只能麻烦点自己生成sql脚本了。最终生成的脚本与JAVA中报错一直,原因排除。

  6. 求救万能的谷歌

    既然自己解决不聊了,就请教万能的谷歌大神吧!!!搜索关键字Oracle MERGE ORA-00904,出来一堆相关网页,试了几个方法依然不行,不过功夫不负有心人,在浏览N个网页后终于问题解决。

 原因其实很简单,就是出现在ON (T1.C_BALE = T2.C_BALE)关键字里面的字段,不允许同时出现在UPDATE SET中,所以抛出这个错误,把UPDATE SET中的C_BALE更新语句去掉,问题解决!!!

跪谢万能的谷歌大神!!!

  

参考地址:http://stackoverflow.com/questions/8266463/oracle-merge-raise-ora-00904-error



© 著作权归作者所有

张乐1024
粉丝 30
博文 17
码字总数 11121
作品 1
昌平
程序员
私信 提问
oracle 使用dblink调用存储过程,报错!

我在代码中通过dblink方式调用了A库的存储过程my_proc(?),这个存储过程参数是一个自定义类型。 代码提示报错:无效的名称模式: TEST001.REMIND_ARRAY_2D 这里的REMIND_ARRAY_2D就是我的自定义...

double9
2014/10/08
1K
2
openmeetings连oracle

我将工程连oracle,ant以后,启动dist里的red5.bat报 [ERROR] [Launcher:/openmeetings] org.hibernate.tool.hbm2ddl.SchemaUpdate - ORA-00904: : 标识符无效 [ERROR] [Launcher:/openmeeti......

小博
2011/03/29
633
0
ORA-00904: 标识符无效

后台报错:ORA-00904: 标识符无效 怎么解决啊?

海风吹过的地方
2016/05/04
1K
0
解决PowerDesigner12建Oracle 9i/10g数据库脚本双引号问题

使用PowerDesigner生成数据库建表SQL脚 本时,尤其是Oracle数据库时,表名一般会带引号。其实加引号是PL/SQL的规范,数据库会严格按照“”中的名称建表,如果没有“”,会按照 ORACLE默认的设...

红薯
2009/12/26
697
0
PLSQL下ORA-00904:"OTHER_XML":标识符无效

plsql下查看执行计划报错:ORA-00904:"OTHERXML":标识符无效 解决办法: 1.报错的用户登录到sqlplus,执行以下命令: sql> drop table PLANTABLE; 2.创建表: sql> @?/rdbms/admin/utlxplan.sql;......

糖果使徒
2018/07/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

vue预渲染

prerender-spa-plugin 安装prerender-spa-plugin (插件使用见npm官网)[https://www.npmjs.com/package/prerender-spa-plugin] npm install prerender-spa-plugin --save-dev 配置prerender-s......

莫西摩西
30分钟前
0
0
Command模式

https://www.cnblogs.com/devinzhang/archive/2012/01/06/2315235.html

南桥北木
今天
1
0
由于PostgreSQL9.x二进制输出格式默认值改变导致的读取图片错误

今天从社区邮件看到一个这样的问题,感觉很有意思,在这分享给大家~具体如下: 问题现象: 作者有一个很老的Java应用,当时后端采用的PostgreSQL数据库版本为8.x,该系统除了正常的数据增删...

闻术苑
今天
2
0
导入sql时出现Invalid default value for 'create_time'报错处理方法

当运行SQL会出现:[Err] 1067 - Invalid default value for 'create_time',是因为Mysql版本不同,如果版本不 < 5.6请去的话报错的处理方法如下: 方法 :alter table table_name modify cre......

writeademo
今天
1
0
对ssm(spring,springmvc,mybatis)的了解总结

ssm框架现在是java web开发的三个主流框架 ,其实严格来算只算是两个框架,因为springmvc属于spring框架 ,是spring的一个mvc子框架 那么我们下面就来了解一下三大框架把 一 .Spring spring...

咸鱼-李y
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部