ORA-00918: column ambiguously defined

来源:互联网 发布:javascript张容铭 pdf 编辑:程序博客网 时间:2024/05/20 10:52

ORA-00918: column ambiguously defined

今天遇到了一个Oracle的SQL问题:ORA-00918: column ambiguously defined

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

  1. SELECT *  
  2.   FROM (SELECT ROW_.*, ROWNUM ROWNUM_  
  3.           FROM (SELECT ACCEPT_DEPT_NAME,  
  4.                        ACCEPT_NO,  
  5.                        ACCEPT_TIME,  
  6.                        FINISH_TIME,  
  7.                        RECENT_OPINION,  
  8.                        ACCEPT_USER_NAME,  
  9.                        APPLY_USER_ID,  
  10.                        FIRST_SUBMIT_TIME,  
  11.                        INFOFLOW_ID,  
  12.                        ACCEPT_DEPT_ID,  
  13.                        BIZ_STATE,  
  14.                        IS_SUPPLY,  
  15.                        IS_SUBMIT,  
  16.                        INFOFLOW_NAME,  
  17.                        SERIAL_NO,  
  18.                        APPLY_TYPE,  
  19.                        APPLY_USER_NAME,  
  20.                        INFOFLOW_TYPE_NAME,  
  21.                        AREA_CODE,  
  22.                        APPLY_SUBJECT_NAME,  
  23.                        FINISH_TYPE,  
  24.                        ACCEPT_ORGAN_INAME,  
  25.                        IS_RESUBMIT,  
  26.                        APPLY_NO,  
  27.                        INFOFLOW_TYPE_ID,  
  28.                        IS_SUBMIT,  
  29.                        ACCEPT_USER_ID,  
  30.                        ACCEPT_ORGAN_ID,  
  31.                        RECENT_SAVETIME,  
  32.                        RECENT_RESULT,  
  33.                        AREA_NAME  
  34.                   FROM DSPC_APPLY_BASE  
  35.                  WHERE 1 = 1  
  36.                    and IS_SUBMIT = '0'  
  37.                    and APPLY_USER_ID = 'ADMIN') ROW_  
  38.          WHERE ROWNUM <= 10)  
  39.  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


0 0