今天有同事反映,一个sql在10.0.2.4下面执行是好的,在11.0.2.3报Ora-00918问题。
sql语句如下:
SELECT kcdm, bjdm, f.kszc, f.jszc FROM table1 a LEFT JOIN table2 f ON a.jxbbh = f.jxbbh LEFT JOIN table3 g ON a.jxbbh = g.jxbbh LEFT JOIN table3 bj ON g.bjdm = bj.bjdm WHERE f.jxbbh IS NOT NULL AND g.jxbbh IS NOT NULL AND a.jxblb = '2' AND a.xndm = '2013' AND a.xqdm = '1'
ora-00918: 未明确定义列 ;本意是显示列的名称没有明确定义是从哪个表里面取。
第一感觉是oracle的bug。于是查阅资料,http://www.itpub.net/thread-1496012-1-1.html 这篇文章讲的比较详细。
问题原因:
ora-00918在10g里面虽然能够执行,但,是一个bug。在11g里面,这个bug已经进行修补,所以报错。
解决问题的根本办法是:规范sql代码,明确列所属表名。