Oracle:不同数据库版本导致的Ora-00918问题

 

    今天有同事反映,一个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代码,明确列所属表名。

 

你可能感兴趣的:(oracle)