更新时间:2024-11-11 GMT+08:00

Trigger

表1 trigger类型

序号

Oracle数据库

GaussDB数据库

差异

1

DML TRIGGER

支持,有差异

GaussDB不支持Compound DML Triggers。

2

SYSTEM TRIGGER

不支持

-

表2 create trigger

序号

Oracle数据库

GaussDB数据库

差异

1

create语法:

CREATE [ OR REPLACE ] [ EDITIONABLE | NONEDITIONABLE ] TRIGGER plsql_trigger_source

支持,有差异

GaussDB不支持EDITIONABLE | NONEDITIONABLE,支持plsql_trigger_source部分行为。

2

plsql_trigger_source ::=语法:

[schema.] trigger_name

[ sharing_clause ] [ default_collation_clause ]

{ simple_dml_trigger

| instead_of_dml_trigger

| compound_dml_trigger

| system_trigger

}

支持,有差异

GaussDB不支持schema、 sharing_clause、default_collation_clause。

3

simple_dml_trigger ::=语法:

{ BEFORE | AFTER } dml_event_clause [ referencing_clause ] [ FOR EACH ROW ]

[ trigger_edition_clause ] [ trigger_ordering_clause ]

[ ENABLE | DISABLE ] [ WHEN ( condition ) ] trigger_body

支持,有差异

GaussDB不支持referencing_clause、referencing_clause(用from referencing_table代替)、trigger_edition_clause、trigger_ordering_clause、 ENABLE | DISABLE;支持trigger_body部分行为。

GaussDB在没有INSTEAD OF TRIGGER的视图上创建语句级BEFORE/AFTER TRIGGER时不会报错,执行DML时报错。

4

dml_event_clause ::=语法:

{ DELETE | INSERT | UPDATE [ OF column [, column ]... ] }

[ OR { DELETE | INSERT | UPDATE [ OF column [, column]... ] }...

ON [ schema.] { table | view }

不支持

-

5

trigger_body ::=语法:

{ plsql_block | CALL routine_clause }

支持,有差异

GaussDB的plsql_block 不允许声明为PRAGMA AUTONOMOUS_TRANSACTION。对于第二个分支,支持类似语法,具体为EXECUTE PROCEDURE function_name ( arguments );方式执行function,并且function需要用户定义,必须声明为不带参数并返回类型为触发器,在触发器触发时执行。

6

instead_of_dml_trigger ::=语法:

INSTEAD OF { DELETE | INSERT | UPDATE } [ OR { DELETE | INSERT | UPDATE } ]...

ON [ NESTED TABLE nested_table_column OF ] [ schema. ] noneditioning_view

[ referencing_clause ] [ FOR EACH ROW ]

[ trigger_edition_clause ] [ trigger_ordering_clause ]

[ ENABLE | DISABLE ] trigger_body

支持,有差异

GaussDB不支持NESTED TABLE nested_table_column OF、referencing_clause、trigger_edition_clause、trigger_ordering_clause、ENABLE | DISABLE。

7

compound_dml_trigger ::=语法:

CREATE trigger FOR dml_event_clause ON view

COMPOUND TRIGGER

INSTEAD OF EACH ROW IS BEGIN

statement;

END INSTEAD OF EACH ROW;

不支持

-

8

system_trigger ::=语法:

{ BEFORE | AFTER | INSTEAD OF }

{ ddl_event [OR ddl_event]... | database_event [OR database_event ]... }

ON { [schema.] SCHEMA | [ PLUGGABLE ] DATABASE }

[ trigger_ordering_clause ] [ ENABLE | DISABLE ] trigger_body

不支持

-

表3 alter trigger

序号

Oracle数据库

GaussDB数据库

差异

1

ALTER TRIGGER [ schema. ] trigger_name

{ trigger_compile_clause

| { ENABLE | DISABLE }

| RENAME TO new_name

| { EDITIONABLE | NONEDITIONABLE }

} ;

支持,有差异

GaussDB不支持schema、trigger_compile_clause、{ ENABLE | DISABLE }、{ EDITIONABLE | NONEDITIONABLE }。

表4 drop trigger

序号

Oracle数据库

GaussDB数据库

差异

1

DROP TRIGGER [ schema. ] trigger ;

支持,有差异

GaussDB不支持schema,需要在trigger_name后面加上ON table_name。

Oracle数据库名为*_TRIGGERS的视图统计了trigger的相关信息,GaussDB相关视图与Oracle存在差异,GaussDB视图具体请参见《开发指南》中“系统表和系统视图 > 系统视图 > 其他视图”中的DB_TRIGGERS、ADM_TRIGGERS、MY_TRIGGERSDB_TRIGGERS、ADM_TRIGGERS、MY_TRIGGERS章节。

表5 Nested, Package, and Standalone Subprograms 兼容性

序号

Oracle数据库

GaussDB数据库

差异

1

nested subprogram(子块)

支持,有差异

不支持重载,不支持定义为自治事务,不支持SETOF的使用,仅限一个限定符引用嵌套子程序或嵌套子程序的变量。

2

package subprogram

支持

-

3

standalone subprogram(包含Function & Procedure)

支持

-

4

匿名块

支持

-

表6 RETURN语句支持情况

序号

Oracle数据库

GaussDB数据库

1

Function

支持

2

Procedure

支持

3

匿名块

支持

表7 Function相关参数

序号

Oracle数据库

GaussDB数据库

差异

1

DETERMINISTIC

支持,有差异

GaussDB中为IMMUTABLE。

2

PARALLEL_ENABLE

不支持

-

3

PIPELINED

不支持

-

4

RESULT_CACHE

不支持

-

表8 参数形式支持

序号

Oracle数据库

GaussDB数据库

1

IN

支持

2

OUT

支持

3

IN OUT

支持

表9 CREATE语句

序号

Oracle数据库

GaussDB数据库

差异

1

CREATE FUNCTION

支持,有差异

GaussDB不支持IF NOT EXISTS语法、

不支持sharing_clause、仅支持部分指定function属性的子句(属性的子句仅支持 invoker_rights_clause子句)、不支持关键字[ EDITIONABLE | NONEDITIONABLE ]。

具体语法请参见《开发指南》中”SQL参考 > SQL语法 > C >CREATE FUNCTION ”章节。

2

CREATE LIBRARY

不支持

-

3

CREATE PACKAGE

支持,有差异

GaussDB不支持IF NOT EXISTS语法、

不支持sharing_clause、仅支持部分指定package属性的子句(属性的子句仅支持 invoker_rights_clause子句)、不支持关键字[ EDITIONABLE | NONEDITIONABLE ]。

具体语法请参见《开发指南》中”SQL参考 > SQL语法 > C >CREATE PACKAGE ”章节。

4

CREATE PACKAGE BODY

支持,有差异

GaussDB不支持IF NOT EXISTS语法、

不支持sharing_clause、不支持关键字[ EDITIONABLE | NONEDITIONABLE ]。

具体语法请参见《开发指南》中”SQL参考 > SQL语法 > C >CREATE PACKAGE ”章节。

5

CREATE PROCEDURE

支持,有差异

GaussDB不支持IF NOT EXISTS语法、

不支持sharing_clause以及后面的子句、不支持关键字[ EDITIONABLE | NONEDITIONABLE ]。

具体语法请参见《开发指南》中”SQL参考 > SQL语法 > C >CREATE PROCEDURE ”章节。

6

CREATE TRIGGER

支持,有差异

GaussDB的具体语法请参见《开发指南》中”SQL参考 > SQL语法 > C >CREATE TRIGGER ”章节。

7

CREATE TYPE

支持,有差异

GaussDB不支持varray、object类型、UNDER语法。

具体语法请参见《开发指南》中”SQL参考 > SQL语法 > C >CREATE TYPE ”章节。

8

CREATE TYPE BODY

不支持

-

表10 ALTER语句

序号

Oracle数据库

GaussDB数据库

差异

1

ALTER FUNCTION

支持,有差异

GaussDB不支持关键字[ EDITIONABLE | NONEDITIONABLE ]、REUSE 、SETTINGS、DEBUG。

具体语法请参见《开发指南》中”SQL参考 > SQL语法 > A > ALTER FUNCTION ”章节。

2

ALTER LIBRARY

不支持

-

3

ALTER PACKAGE

支持,有差异

GaussDB不支持关键字[ EDITIONABLE | NONEDITIONABLE ]、REUSE 、SETTINGS、DEBUG。

具体语法请参见《开发指南》中”SQL参考 > SQL语法 > A > ALTER PACKAGE ”章节。

4

ALTER PROCEDURE

支持,有差异

GaussDB不支持关键字[ EDITIONABLE | NONEDITIONABLE ]、REUSE 、SETTINGS、DEBUG。

具体语法请参见《开发指南》中”SQL参考 > SQL语法 > A > ALTER PROCEDURE ”章节。

5

ALTER TRIGGER

支持,有差异

GaussDB仅支持修改trigger名字。

具体语法请参见《开发指南》中”SQL参考 > SQL语法 > A > ALTER TRIGGER ”章节。

6

ALTER TYPE

支持,有差异

GaussDB仅支持部分语句。

具体语法请参见《开发指南》中”SQL参考 > SQL语法 > A > ALTER TYPE ”章节。

表11 DROP语句

序号

Oracle数据库

GaussDB数据库

差异

1

DROP FUNCTION

支持

-

2

DROP LIBRARY

不支持

-

3

DROP PACKAGE

支持

-

4

DROP PROCEDURE

支持

-

5

DROP TRIGGER

支持,有差异

GaussDB的语法不同。

具体语法可参考:请参见《开发指南》中”SQL参考 > SQL语法 > D > DROP TRIGGER ”章节。

6

DROP TYPE

支持,有差异

GaussDB不支持关键字FORCE、VALIDATE。

具体语法请参见《开发指南》中”SQL参考 > SQL语法 > D > DROP TYPE ”章节。

7

DROP TYPE BODY

不支持

-

表12 Function、Procedure、匿名块相关关键字

序号

Oracle数据库

GaussDB数据库

差异

1

ACCESSIBLE BY

不支持

-

2

AGGREGATE

支持,有差异

  • GaussDB不支持Oracle的aggregate using [schema.] implementation_type用法。
  • GaussDB的具体用法请参见《开发指南》中“SQL参考 > SQL语法 > C > CREATE AGGREGATE”章节。

语法不同,但实现功能相同。

3

DETERMINISTIC

支持,有差异

GaussDB仅在语法上支持关键字DETERMINISTIC,未实现功能。

4

PIPE ROW

不支持

-

5

PIPELINED

不支持

-

6

SQL_MACRO

不支持

-

7

RESTRICT_REFERENCES

不支持

-

8

INLINE

不支持

-

表13 异常处理相关关键字

序号

Oracle数据库

GaussDB数据库

差异

1

EXCEPTION_INIT

支持,有差异

GaussDB不支持与系统错误码进行绑定

2

Exception

支持

-

3

Exception Handler

支持

-

4

SQLCODE

支持

-

5

SQLERRM

支持

-