ORA-00918: column ambiguously defined


今天遇到了一個Oracle的SQL問題:ORA-00918: column ambiguously defined

大致的意思就是字段名稱不明確,可能存在同名的字段

SELECT *
  FROM (SELECT ROW_.*, ROWNUM ROWNUM_
          FROM (SELECT ACCEPT_DEPT_NAME,
                       ACCEPT_NO,
                       ACCEPT_TIME,
                       FINISH_TIME,
                       RECENT_OPINION,
                       ACCEPT_USER_NAME,
                       APPLY_USER_ID,
                       FIRST_SUBMIT_TIME,
                       INFOFLOW_ID,
                       ACCEPT_DEPT_ID,
                       BIZ_STATE,
                       IS_SUPPLY,
                       IS_SUBMIT,
                       INFOFLOW_NAME,
                       SERIAL_NO,
                       APPLY_TYPE,
                       APPLY_USER_NAME,
                       INFOFLOW_TYPE_NAME,
                       AREA_CODE,
                       APPLY_SUBJECT_NAME,
                       FINISH_TYPE,
                       ACCEPT_ORGAN_INAME,
                       IS_RESUBMIT,
                       APPLY_NO,
                       INFOFLOW_TYPE_ID,
                       IS_SUBMIT,
                       ACCEPT_USER_ID,
                       ACCEPT_ORGAN_ID,
                       RECENT_SAVETIME,
                       RECENT_RESULT,
                       AREA_NAME
                  FROM DSPC_APPLY_BASE
                 WHERE 1 = 1
                   and IS_SUBMIT = '0'
                   and APPLY_USER_ID = 'ADMIN') ROW_
         WHERE ROWNUM <= 10)
 WHERE ROWNUM_ > 0

程序使用的是自動化的Java實體映射SQL字段,查詢數據的SQL並沒有自己拼寫,是由框架自動生成的,系統會打印出執行的SQL語句


將SQL語句復制到PLSQL中執行,也報同樣的異常,只執行最內層的select語句是沒有問題的,加上最外層的SELECT ROW_.*就出現ORA-00918異常


網上查了一些資料,大多都是幾個表聯查出現的問題,而我的程序只涉及到一個單表


仔細看了下程序打印出來的SQL,雖然是單表查詢,但是發現執行的SQL語句里有兩個相同的字段名IS_SUBMIT,到這里,原因基本上就找到了,后來去看了下Java實體類映射中的ORM標注,發現的確有兩個屬性名稱不同的Java屬性映射了同一個SQL字段,修改之后,問題你迎刃而解。


參考資料:

http://www.dotblogs.com.tw/sporting/archive/2012/10/10/76382.aspx

http://blog.chinaunix.net/uid-20274021-id-1969225.html



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM