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

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

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

因而开始分析问题缘由:数据库

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

    经确认该字段一直存在,而且在语句的UPDATE SET部分以及INSERT 部分都存在针对该字段的操做,因此字段不存在缘由排除spa

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

    经确认为同一个数据库,缘由排除get

  3. 字符大小写是否敏感io

    所有转换为大写后问题依旧,缘由排除(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

相关文章
相关标签/搜索