在11g到19c的迁移过程中发现一个sql语法方面的问题

来源:这里教程网 时间:2026-03-03 20:03:32 作者:

在11g到19c的迁移过程中发现一个sql语法方面的问题: 11.2.0.2 和19c分别创建测试表: create table tt as select * from dba_objects; create table t1 as select * from dba_objects; 分别执行下面的sql: select A.B.object_name   FROM TT A LEFT JOIN T1 B ON B.object_id=A.object_id; select Z.B.object_name   FROM TT A LEFT JOIN T1 B ON B.object_id=A.object_id; 11g下(11.2.0.2和11.2.0.4效果一样): SQL> set autotrace trace SQL>  SQL> select A.B.object_name   FROM TT A LEFT JOIN T1 B ON B.object_id=A.object_id; 71895 rows selected. Execution Plan ---------------------------------------------------------- Plan hash value: 3382560155 -------------------------------------------------------------------------------- | Id  | Operation    | Name | Rows  | Bytes |TempSpc| Cost (%CPU)| Time -------------------------------------------------------------------------------- |   0 | SELECT STATEMENT   |   | 62167 |  5585K|   |   941   (1)| 00:00:12 | |*  1 |  HASH JOIN OUTER   |   | 62167 |  5585K|  1520K|   941   (1)| 00:00:12 | |   2 |   TABLE ACCESS FULL| TT   | 62167 |   789K|   |   287   (1)| 00:00:04 | |   3 |   TABLE ACCESS FULL| T1   | 67933 |  5240K|   |   287   (1)| 00:00:04 | SQL> select Z.B.object_name   FROM TT A LEFT JOIN T1 B ON B.object_id=A.object_id; 71895 rows selected. Execution Plan ---------------------------------------------------------- Plan hash value: 3382560155 -------------------------------------------------------------------------------- | Id  | Operation    | Name | Rows  | Bytes |TempSpc| Cost (%CPU)| Time -------------------------------------------------------------------------------- |   0 | SELECT STATEMENT   |   | 62167 |  5585K|   |   941   (1)| 00:00:12 | |*  1 |  HASH JOIN OUTER   |   | 62167 |  5585K|  1520K|   941   (1)| 00:00:12 | |   2 |   TABLE ACCESS FULL| TT   | 62167 |   789K|   |   287   (1)| 00:00:04 | |   3 |   TABLE ACCESS FULL| T1   | 67933 |  5240K|   |   287   (1)| 00:00:04 | 19c下执行: SQL> set autotrace trace SQL> select Z.B.object_name   FROM TT A LEFT JOIN T1 B ON B.object_id=A.object_id; select Z.B.object_name FROM TT A LEFT JOIN T1 B ON B.object_id=A.object_id        * ERROR at line 1: ORA-00904: "Z"."B"."OBJECT_NAME": invalid identifier SQL> select A.B.object_name   FROM TT A LEFT JOIN T1 B ON B.object_id=A.object_id; select A.B.object_name FROM TT A LEFT JOIN T1 B ON B.object_id=A.object_id        * ERROR at line 1: ORA-00904: "A"."B"."OBJECT_NAME": invalid identifier 很明显,19c的语法检查比11g要严格了多,重点还是写sql的时候要严谨,不然还会遇到很多奇奇怪怪的问题。 目前暂时没有想到什么办法解决: 测试将compatible 改为11.2.0.4 (compatible不能降级,11g的库升级为19c)然后再执行sql SQL> show parameter com NAME      TYPE VALUE ------------------------------------ ----------- ------------------------------ cell_offload_compaction      string ADAPTIVE commit_logging      string commit_point_strength      integer 1 commit_wait      string commit_write      string common_user_prefix      string C## compatible      string 11.2.0.4.0 db_index_compression_inheritance     string NONE inmemory_prefer_xmem_memcompress     string nls_comp      string BINARY noncdb_compatible      boolean FALSE 测试发现 也不行。

相关推荐