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

相關文章
相關標籤/搜索