更新时间:2024-12-06 GMT+08:00

静态SQL

表1 静态查询 SQL语句

序号

Oracle数据库

GaussDB数据库

差异

1

SELECT

支持,有差异

GaussDB和Oracle在某些场景下有不同。

GaussDB中FOR SHARE对检索出来的行加共享锁,不同事务的共享锁不会互相阻塞。若数据在一个事务中被FOR SHARE锁定,在另一个事务中使用SELECT FOR SHARE SKIP LOCKED时,SKIP LOCKED不会跳过锁。

表2 静态DML SQL语句

序号

Oracle数据库

GaussDB数据库

差异

1

INSERT

支持

-

2

UPDATE

支持

-

3

DELETE

支持

-

4

MERGE

支持

-

5

LOCK TABLE

支持

-

6

INSERT ALL

支持,有差异

  • Oracle不支持对into_clause的表设置别名,GaussDB支持。
  • into_clause指定sequence:
    • Oracle:首次引用nextval会生成下一个数字,但所有非首次引用的nextval都将返回相同数字。
    • GaussDB:引用nextval生成的数字可以正常自增。
  • Oracle设置plan_hint语句可以正常生效,GaussDB不生效。
表3 静态TCL SQL语句

序号

Oracle数据库

GaussDB数据库

差异

1

COMMIT

支持

-

2

ROLLBACK

支持

-

3

SAVEPOINT

支持

-

4

SET TRANSACTION

支持,有差异

GaussDB不支持NAME string语法、USE ROLLBACK SEGMENT rollback_segment语法。

表4 伪列

序号

Oracle数据库

GaussDB数据库

差异

1

CURRVAL and NEXTVAL

支持

-

2

LEVEL

不支持

-

3

OBJECT_VALUE

不支持

-

4

ROWID

不支持

-

5

ROWNUM

支持,有差异

不推荐ROWNUM条件用于JOIN ON子句。

GaussDB中ROWNUM条件用于JOIN ON子句时在LEFT JOIN、RIGHT JOIN、FULL JOIN场景下和MERGE INTO场景下与其他数据库行为不一致,直接进行业务迁移存在风险。

表5 隐式游标属性

序号

Oracle数据库

GaussDB数据库

差异

1

SQL%FOUND

支持,有差异

GaussDB在commit\rollback之后不刷新隐式游标结果,Oracle会在commit\rollback之后刷新隐式游标结果。

2

SQL%NOTFOUND

支持,有差异

3

SQL%ROWCOUNT

支持,有差异

4

SQL%ISOPEN

支持,有差异

5

SQL%BULK_ROWCOUNT

不支持

6

SQL%BULK_EXCEPTIONS

不支持

表6 显式游标语法及关键字

序号

Oracle数据库

GaussDB数据库

差异

1

CURSOR cursor_name [ parameter_list ] RETURN return_type;

支持

-

2

CURSOR cursor_name [ parameter_list ] [ RETURN return_type ]

IS select_statement;

支持

-

3

OPEN

支持

-

4

CLOSE

支持,有差异

GaussDB在exception内部会自动关闭,Oracle在exception内部不会自动关闭。

5

FETCH

支持

-

6

CURRENT OF CURSOR

支持

-

表7 显式游标属性

序号

Oracle数据库

GaussDB数据库

1

SQL%FOUND

支持

2

SQL%NOTFOUND

支持

3

SQL%ROWCOUNT

支持

4

SQL%ISOPEN

支持

表8 游标循环

序号

Oracle数据库

GaussDB数据库

1

FOR LOOP

支持

表9 自治事务支持场景

序号

Oracle数据库

GaussDB数据库

1

存储过程

支持

2

匿名块

支持

3

函数

支持

4

Package

支持