更新时间:2025-09-09 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

支持,有差异

Oracle 允许目标表的列数多于子查询结果的列数,但必须显式指定要插入的列名,以确保列数匹配。GaussDB可以省略显式指定要插入的列名,该情况下子查询结果的第1列值插入到目标表的第1列中,依此类推,目标表多出的列会被插入NULL值(如果该列允许为NULL)或默认值(如果该列有默认值)。

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不生效。
  • Oracle允许目标表的列数多于子查询结果的列数,但必须显式指定要插入的列名,以确保列数匹配。GaussDB可以省略显式指定要插入的列名,该情况下子查询结果的第1列值插入到目标表的第1列中,依此类推,目标表多出的列会被插入NULL值(如果该列允许为NULL)或默认值(如果该列有默认值)。
表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

支持,有差异。

对于FORALL + BULK COLLECT INTO场景, INTO变量在GaussDB中仅返回单条DML语句执行结果,在Oracle中返回DML语句累计执行结果。

表9 自治事务支持场景

序号

Oracle数据库

GaussDB数据库

1

存储过程

支持

2

匿名块

支持

3

函数

支持

4

Package

支持

相关文档