云数据库 GAUSSDB-PL/SQL语言:trigger

时间:2024-01-05 17:36:07

trigger

表34 trigger类型

序号

Oracle数据库

GaussDB数据库

差异

1

DML TRIGGER

支持,有差异

不支持Compound DML Triggers。

2

SYSTEM TRIGGER

不支持

-

表35 create trigger

语法类型

Oracle数据库

GaussDB 数据库

差异

create语法

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

支持,有差异

不支持OR REPLACE 、EDITIONABLE | NONEDITIONABLE、plsql_trigger_source部分支持。

plsql_trigger_source ::=

[schema.] trigger_name

[ sharing_clause ] [ default_collation_clause ]

{ simple_dml_trigger

| instead_of_dml_trigger

| compound_dml_trigger

| system_trigger

}

支持,有差异

不支持schema、 sharing_clause、default_collation_clause。

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

支持,有差异

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

dml_event_clause ::=

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

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

ON [ schema.] { table | view }

不支持

-

trigger_body ::=

{ plsql_block | CALL routine_clause }

支持,有差异

不支持plsql_block,仅支持EXECUTE PROCEDURE function_name ( arguments );方式执行func,并且func需要用户定义,必须声明为不带参数并返回类型为触发器,在触发器触发时执行。

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

支持,有差异

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

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;

不支持

-

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

不支持

-

表36 alter trigger

序号

Oracle数据库

GaussDB数据库

差异

1

ALTER TRIGGER [ schema. ] trigger_name

{ trigger_compile_clause

| { ENABLE | DISABLE }

| RENAME TO new_name

| { EDITIONABLE | NONEDITIONABLE }

} ;

支持,有差异

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

表37 drop trigger

序号

Oracle数据库

GaussDB数据库

差异

1

DROP TRIGGER [ schema. ] trigger ;

支持,有差异

不支持schema。

Oracle数据库名为*_TRIGGERS的视图统计了trigger的相关信息,视图具体差异参考系统视图章节。

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

序号

Oracle数据库

GaussDB数据库

差异

1

nested subprogram(子块)

支持,有差异

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

2

package subprogram

支持

-

3

standalone subprogram(包含Function & Procedure)

支持

-

4

匿名块

支持

-

表39 RETURN语句支持情况

序号

Oracle数据库

GaussDB数据库

差异

1

Function

支持

-

2

Procedure

支持

-

3

匿名块

支持

-

表40 Function相关参数

序号

Oracle数据库

GaussDB数据库

差异

1

DETERMINISTIC

支持,有差异

GaussDB中为IMMUTABLE

2

PARALLEL_ENABLE

不支持

-

3

PIPELINED

不支持

-

4

RESULT_CACHE

不支持

-

表41 参数形式支持

序号

Oracle数据库

GaussDB数据库

差异

1

IN

支持

-

2

OUT

支持

-

3

IN OUT

支持

-

表42 CREATE语句

序号

Oracle数据库

GaussDB数据库

差异

1

CREATE FUNCTION

支持

-

2

CREATE LIBRARY

不支持

-

3

CREATE PACKAGE

支持

-

4

CREATE PACKAGE BODY

支持

-

5

CREATE PROCEDURE

支持

-

6

CREATE TRIGGER

支持

-

7

CREATE TYPE

支持,有差异

支持类型不同。

8

CREATE TYPE BODY

不支持

-

表43 ALTER语句

序号

Oracle数据库

GaussDB数据库

差异

1

ALTER FUNCTION

支持

-

2

ALTER LIBRARY

不支持

-

3

ALTER PACKAGE

支持

-

4

ALTER PROCEDURE

支持

-

5

ALTER TRIGGER

支持

-

6

ALTER TYPE

支持

-

表44 DROP语句

序号

Oracle数据库

GaussDB数据库

差异

1

DROP FUNCTION

支持

-

2

DROP LIBRARY

不支持

-

3

DROP PACKAGE

支持

-

4

DROP PROCEDURE

支持

-

5

DROP TRIGGER

支持

-

6

DROP TYPE

支持

-

7

DROP TYPE BODY

不支持

-

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

序号

Oracle数据库

GaussDB数据库

差异

1

AC CES SIBLE BY

不支持

-

2

AGGREGATE

支持

-

3

DETERMINISTIC

支持,有差异

-

4

PIPE ROW

不支持

-

5

PIPELINED

不支持

-

6

SQL_MACRO

不支持

-

7

RESTRICT_REFERENCES

不支持

-

8

INLINE

支持,有差异

-

表46 异常处理相关关键字

序号

Oracle数据库

GaussDB数据库

差异

1

EXCEPTION_INIT

支持,有差异

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

2

Exception

支持

-

3

Exception Handler

支持

-

4

SQLCODE

支持

-

5

SQLERRM

支持

-

表47 其他PL/SQL关键字

序号

Oracle数据库

GaussDB数据库

差异

1

COVERAGE

不支持

-

2

COLLATION

支持

-

3

DEPRECATE

不支持

-

4

FORALL

支持

-

5

NOCOPY

不支持

-

6

RETURNING INTO

支持,有差异

列存表不支持

7

SERIALLY_REUSABLE

不支持

-

8

SHARING

不支持

-

9

UDF

支持,有差异

java UDF只支持分布式

10

BULK COLLECT

支持

-

support.huaweicloud.com/productdesc-gaussdb/gaussdb-39-0010.html