ORA-00918: column ambiguously defined
2016-02-22 11:43
513 查看
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
相关文章推荐
- ECMAScript6
- java中的IO最全面整理
- cuda最佳线程数目设置
- Path2.0菜单-Android属性动画
- 设计模式之——工厂模式(FactoryMethodPattern)
- 写在我第一个虚幻程序之前
- JVM调优总结(十二)-参考资料
- iOS/OS X 借助工具解决内存问题
- jQuery获取字符串中出现最多的数
- JAVA GC---新生代、老年代
- Android嵌入页面的碎片Fragment
- 证书失效 /苹果系统的安全证书过期
- 关于js跨域Access-Control-Allow-Origin问题
- Java 自动装箱与拆箱(Autoboxing and unboxing)
- JVM调优总结(十一)-反思
- Sql Server 里的向上取整、向下取整、四舍五入取整
- 《触动人心设计优秀iphone应用》读后感
- Linux挂载U盘
- 如何利用ViewPager、Fragment、PagerTabStrip实现多页面滑动效果
- java线程同步5种方式