zoukankan      html  css  js  c++  java
  • 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


  • 相关阅读:
    Python 单向循环链表
    python 单向链表实现
    Python实现栈
    单进程-非阻塞服务器
    Nginx开发从入门到精通
    Spring入门第十五课
    Spring入门第十六课
    Spring入门第十四课
    Spring入门第十三课
    Spring入门第十二课
  • 原文地址:https://www.cnblogs.com/wenlong/p/3283940.html
Copyright © 2011-2022 走看看