ITPub博客

首页 > 数据库 > Oracle > 在11g到19c的迁移过程中发现一个sql语法方面的问题

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

原创 Oracle 作者:oracle11111 时间:2024-05-23 16:52:46 0 删除 编辑

在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


测试发现 也不行。







来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69924215/viewspace-3016465/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-05-19

  • 博文量
    81
  • 访问量
    90371