今天有同事反映,一个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 = ''
AND a.xndm = ''
AND a.xqdm = ''
ora-00918: 未明确定义列 ;本意是显示列的名称没有明确定义是从哪个表里面取。
第一感觉是oracle的bug。于是查阅资料,http://www.itpub.net/thread-1496012-1-1.html 这篇文章讲的比较详细。
问题原因:
ora-00918在10g里面虽然能够执行,但,是一个bug。在11g里面,这个bug已经进行修补,所以报错。
解决问题的根本办法是:规范sql代码,明确列所属表名。