Trigger
| Oracle数据库 | GaussDB数据库 | 差异 |
|---|---|---|
| DML TRIGGER | 支持,有差异 | GaussDB不支持Compound DML Triggers。 |
| SYSTEM TRIGGER | 不支持 | - |
| Oracle数据库 | GaussDB数据库 | 差异 |
|---|---|---|
| create语法: CREATE [ OR REPLACE ] [ EDITIONABLE | NONEDITIONABLE ] TRIGGER plsql_trigger_source | 支持,有差异 | GaussDB不支持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 } | 支持,有差异 | GaussDB不支持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 | 支持,有差异 | GaussDB不支持referencing_clause(用from referencing_table代替)、trigger_edition_clause、trigger_ordering_clause、 ENABLE | DISABLE,支持trigger_body部分行为。 GaussDB在没有INSTEAD OF TRIGGER的视图上创建语句级BEFORE/AFTER TRIGGER时不会报错,执行DML时报错。 |
| 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 } | 支持,有差异 | GaussDB不支持plsql_block,仅支持EXECUTE PROCEDURE function_name ( arguments );方式执行function,并且function需要用户定义,必须声明为不带参数并返回类型为触发器,在触发器触发时执行。 |
| 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。 |
| 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 | 不支持 | - |
| Oracle数据库 | GaussDB数据库 | 差异 |
|---|---|---|
| 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 }。 |
| Oracle数据库 | GaussDB数据库 | 差异 |
|---|---|---|
| DROP TRIGGER [ schema. ] trigger ; | 支持,有差异 | GaussDB不支持schema,需要在trigger_name后面加上ON table_name。 |
Oracle数据库名为*_TRIGGERS的视图统计了trigger的相关信息,GaussDB相关视图与Oracle存在差异,GaussDB视图具体请参见DB_TRIGGERS、ADM_TRIGGERS、MY_TRIGGERS。
| Oracle数据库 | GaussDB数据库 | 差异 |
|---|---|---|
| nested subprogram(子块) | 支持,有差异 | GaussDB不支持重载。 GaussDB不支持定义为自治事务。 GaussDB不支持SETOF的使用,仅限一个限定符引用嵌套子程序或嵌套子程序的变量。 |
| package subprogram | 支持 | - |
| standalone subprogram(包含Function & Procedure) | 支持 | - |
| 匿名块 | 支持 | - |
| Oracle数据库 | GaussDB数据库 |
|---|---|
| Function | 支持 |
| Procedure | 支持 |
| 匿名块 | 支持 |
| Oracle数据库 | GaussDB数据库 | 差异 |
|---|---|---|
| DETERMINISTIC | 支持,有差异 | GaussDB中为IMMUTABLE。 |
| PARALLEL_ENABLE | 不支持 | - |
| PIPELINED | 不支持 | - |
| RESULT_CACHE | 不支持 | - |
| Oracle数据库 | GaussDB数据库 |
|---|---|
| IN | 支持 |
| OUT | 支持 |
| IN OUT | 支持 |
| Oracle数据库 | GaussDB数据库 | 差异 |
|---|---|---|
| CREATE FUNCTION | 支持,有差异 | GaussDB不支持IF NOT EXISTS语法、不支持sharing_clause、仅支持部分指定function属性的子句(属性的子句仅支持 invoker_rights_clause子句)、不支持关键字[ EDITIONABLE | NONEDITIONABLE ]。 GaussDB的具体语法请参见CREATE FUNCTION章节。 |
| CREATE LIBRARY | 不支持 | - |
| CREATE PACKAGE | 支持,有差异 | GaussDB不支持IF NOT EXISTS语法、不支持sharing_clause、仅支持部分指定package属性的子句(属性的子句仅支持 invoker_rights_clause子句)、不支持关键字[ EDITIONABLE | NONEDITIONABLE ]。 GaussDB的具体语法请参见CREATE PACKAGE章节。 |
| CREATE PACKAGE BODY | 支持,有差异 | GaussDB不支持IF NOT EXISTS语法、不支持sharing_clause、不支持关键字[ EDITIONABLE | NONEDITIONABLE ]。 GaussDB的具体语法请参见CREATE PACKAGE章节。 |
| CREATE PROCEDURE | 支持,有差异 | GaussDB不支持IF NOT EXISTS语法、不支持sharing_clause子句、不支持关键字[ EDITIONABLE | NONEDITIONABLE ]。 GaussDB的具体语法请参见CREATE PROCEDURE章节。 |
| CREATE TRIGGER | 支持,有差异 | GaussDB的具体语法请参见CREATE TRIGGER章节。 |
| CREATE TYPE | 支持,有差异 | GaussDB不支持varray、object类型、UNDER语法。 GaussDB的具体语法请参见CREATE TYPE章节。 |
| CREATE TYPE BODY | 不支持 | - |
| CREATE OR REPLACE TYPE | 不支持 | - |
| Oracle数据库 | GaussDB数据库 | 差异 |
|---|---|---|
| ALTER FUNCTION | 支持,有差异 | GaussDB不支持关键字[ EDITIONABLE | NONEDITIONABLE ]、REUSE 、SETTINGS、DEBUG。 GaussDB的具体语法请参见ALTER FUNCTION章节。 |
| ALTER LIBRARY | 不支持 | - |
| ALTER PACKAGE | 支持,有差异 | GaussDB不支持关键字[ EDITIONABLE | NONEDITIONABLE ]、REUSE 、SETTINGS、DEBUG。 GaussDB的具体语法请参见ALTER PACKAGE章节。 |
| ALTER PROCEDURE | 支持,有差异 | GaussDB不支持关键字[ EDITIONABLE | NONEDITIONABLE ]、REUSE 、SETTINGS、DEBUG。 |
| ALTER TRIGGER | 支持,有差异 | GaussDB仅支持修改trigger名字。 GaussDB的具体语法请参见ALTER TRIGGER章节。 |
| ALTER TYPE | 支持,有差异 | GaussDB仅支持部分语句。 GaussDB的具体语法请参见ALTER TYPE章节。 |
| Oracle数据库 | GaussDB数据库 | 差异 |
|---|---|---|
| DROP FUNCTION | 支持 | - |
| DROP LIBRARY | 不支持 | - |
| DROP PACKAGE | 支持 | - |
| DROP PROCEDURE | 支持 | - |
| DROP TRIGGER | 支持,有差异 | GaussDB的语法与Oracle不同。 GaussDB的具体语法请参见DROP TRIGGER章节。 |
| DROP TYPE | 支持,有差异 | GaussDB不支持关键字FORCE、VALIDATE。 GaussDB的具体语法请参见DROP TYPE章节。 |
| DROP TYPE BODY | 不支持 | - |
| Oracle数据库 | GaussDB数据库 | 差异 |
|---|---|---|
| ACCESSIBLE BY | 不支持 | - |
| AGGREGATE | 支持,有差异 |
语法不同,但实现功能相同。 |
| DETERMINISTIC | 支持,有差异 | GaussDB仅在语法上支持关键字DETERMINISTIC,未实现功能。 |
| PIPE ROW | 不支持 | - |
| PIPELINED | 不支持 | - |
| SQL_MACRO | 不支持 | - |
| RESTRICT_REFERENCES | 不支持 | - |
| INLINE | 不支持 | - |
| Oracle数据库 | GaussDB数据库 | 差异 |
|---|---|---|
| EXCEPTION_INIT | 支持,有差异 | GaussDB不支持与系统错误码进行绑定。若在同一个存储过程或函数中通过EXCEPTION_INIT设置相同错误码,Oracle数据库不支持各自分别作为条件捕获异常,GaussDB支持此行为,详见示例。 |
| Exception | 支持 | - |
| Exception Handler | 支持 | - |
| SQLCODE | 支持 | - |
| SQLERRM | 支持 | - |
| Oracle数据库 | GaussDB数据库 |
|---|---|
| COVERAGE | 不支持 |
| COLLATION | 支持 |
| DEPRECATE | 不支持 |
| FORALL | 支持 |
| NOCOPY | 不支持 |
| RETURNING | 支持 |
| SERIALLY_REUSABLE | 不支持 |
| SHARING | 不支持 |
| BULK COLLECT | 支持 |