# Trigger
表1trigger类型 
| Oracle数据库    | GaussDB数据库 | 差异                               |
|:---|:---|:---|
| DML TRIGGER     | 支持，有差异       | GaussDB不支持Compound DML Triggers。 |
| SYSTEM TRIGGER | 不支持           | -                                |
   
表2create 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                                                                                                                               | 不支持         | -                                                                                                                                                                                                                                                                     |
   
表3alter trigger 
| 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 }。 |
   
表4drop trigger 
| Oracle数据库                            | GaussDB数据库 | 差异                                                     |
|:---|:---|:---|
| DROP TRIGGER \[ schema. \] trigger ; | 支持，有差异       | GaussDB不支持schema，需要在trigger_name后面加上ON table_name。 |
   
Oracle数据库名为\*_TRIGGERS的视图统计了trigger的相关信息，GaussDB相关视图与Oracle存在差异，GaussDB视图具体请参见[DB_TRIGGERS](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/gaussdb-08-1240.html)、[ADM_TRIGGERS](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/gaussdb-08-1212.html)、[MY_TRIGGERS](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/gaussdb-08-1305.html)。
表5Nested, Package and Standalone Subprograms 兼容性 
| Oracle数据库                                      | GaussDB数据库 | 差异                                                                                                                                                                        |
|:---|:---|:---|
| nested subprogram（子块）                         | 支持，有差异  | GaussDB不支持重载。 GaussDB不支持定义为自治事务。 GaussDB不支持SETOF的使用，仅限一个限定符引用嵌套子程序或嵌套子程序的变量。 |
| package subprogram                            | 支持       | -                                                                                                                                                                       |
| standalone subprogram（包含Function \& Procedure） | 支持     | -                                                                                                                                                                      |
| 匿名块                                          | 支持      | -                                                                                                                                                                       |
   
表6RETURN语句支持情况 
| Oracle数据库  | GaussDB数据库 |
|:---|:---|
| Function   | 支持         |
| Procedure | 支持        |
| 匿名块       | 支持         |
   
表7Function相关参数 
| Oracle数据库     | GaussDB数据库 | 差异                  |
|:---|:---|:---|
| DETERMINISTIC | 支持，有差异    | GaussDB中为IMMUTABLE。 |
| PARALLEL_ENABLE | 不支持       | -                    |
| PIPELINED        | 不支持        | -                 |
| RESULT_CACHE | 不支持         | -                  |
   
表8参数形式支持 
| Oracle数据库 | GaussDB数据库 |
|:---|:---|
| IN     | 支持         |
| OUT     | 支持       |
| IN OUT  | 支持         |
   
表9CREATE语句 
| Oracle数据库             | GaussDB数据库 | 差异                                                                                                                                                                                                                                                                                                                 |
|:---|:---|:---|
| CREATE FUNCTION          | 支持，有差异        | GaussDB不支持IF NOT EXISTS语法、不支持sharing_clause、仅支持部分指定function属性的子句（属性的子句仅支持 invoker_rights_clause子句）、不支持关键字\[ EDITIONABLE \| NONEDITIONABLE \]。 GaussDB的具体语法请参见[CREATE FUNCTION](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/gaussdb-08-0249.html)章节。 |
| CREATE LIBRARY         | 不支持           | -                                                                                                                                                                                                                                                                                                                |
| CREATE PACKAGE         | 支持，有差异         | GaussDB不支持IF NOT EXISTS语法、不支持sharing_clause、仅支持部分指定package属性的子句（属性的子句仅支持 invoker_rights_clause子句）、不支持关键字\[ EDITIONABLE \| NONEDITIONABLE \]。 GaussDB的具体语法请参见[CREATE PACKAGE](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/gaussdb-08-0260.html)章节。    |
| CREATE PACKAGE BODY     | 支持，有差异        | GaussDB不支持IF NOT EXISTS语法、不支持sharing_clause、不支持关键字\[ EDITIONABLE \| NONEDITIONABLE \]。 GaussDB的具体语法请参见[CREATE PACKAGE](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/gaussdb-08-0260.html)章节。                                                          |
| CREATE PROCEDURE         | 支持，有差异       | GaussDB不支持IF NOT EXISTS语法、不支持sharing_clause子句、不支持关键字\[ EDITIONABLE \| NONEDITIONABLE \]。 GaussDB的具体语法请参见[CREATE PROCEDURE](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/gaussdb-08-0261.html)章节。                                                   |
| CREATE TRIGGER           | 支持，有差异       | GaussDB的具体语法请参见[CREATE TRIGGER](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/gaussdb-08-0279.html)章节。                                                                                                                                                                                               |
| CREATE TYPE            | 支持，有差异         | GaussDB不支持varray、object类型、UNDER语法。 GaussDB的具体语法请参见[CREATE TYPE](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/gaussdb-08-0280.html)章节。                                                                                                                |
| CREATE TYPE BODY         | 不支持           | -                                                                                                                                                                                                                                                                                                                 |
| CREATE OR REPLACE TYPE | 不支持         | -                                                                                                                                                                                                                                                                                                                |
   
表10ALTER语句 
| Oracle数据库         | GaussDB数据库 | 差异                                                                                                                                                                                                                                           |
|:---|:---|:---|
| ALTER FUNCTION     | 支持，有差异   | GaussDB不支持关键字\[ EDITIONABLE \| NONEDITIONABLE \]、REUSE 、SETTINGS、DEBUG。 GaussDB的具体语法请参见[ALTER FUNCTION](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/gaussdb-08-0190.html)章节。 |
| ALTER LIBRARY     | 不支持        | -                                                                                                                                                                                                                                         |
| ALTER PACKAGE    | 支持，有差异    | GaussDB不支持关键字\[ EDITIONABLE \| NONEDITIONABLE \]、REUSE 、SETTINGS、DEBUG。 GaussDB的具体语法请参见[ALTER PACKAGE](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/gaussdb-08-0199.html)章节。 |
| ALTER PROCEDURE | 支持，有差异     | GaussDB不支持关键字\[ EDITIONABLE \| NONEDITIONABLE \]、REUSE 、SETTINGS、DEBUG。                                                                                                                                                                      |
| ALTER TRIGGER     | 支持，有差异      | GaussDB仅支持修改trigger名字。 GaussDB的具体语法请参见[ALTER TRIGGER](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/gaussdb-08-0217.html)章节。                                                     |
| ALTER TYPE        | 支持，有差异     | GaussDB仅支持部分语句。 GaussDB的具体语法请参见[ALTER TYPE](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/gaussdb-08-0218.html)章节。                                                              |
   
表11DROP语句 
| Oracle数据库       | GaussDB数据库 | 差异                                                                                                                                                                                             |
|:---|:---|:---|
| DROP FUNCTION   | 支持           | -                                                                                                                                                                                             |
| DROP LIBRARY   | 不支持        | -                                                                                                                                                                                            |
| DROP PACKAGE     | 支持         | -                                                                                                                                                                                            |
| DROP PROCEDURE | 支持          | -                                                                                                                                                                                             |
| DROP TRIGGER    | 支持，有差异       | GaussDB的语法与Oracle不同。 GaussDB的具体语法请参见[DROP TRIGGER](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/gaussdb-08-0326.html)章节。         |
| DROP TYPE       | 支持，有差异    | GaussDB不支持关键字FORCE、VALIDATE。 GaussDB的具体语法请参见[DROP TYPE](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/gaussdb-08-0327.html)章节。 |
| DROP TYPE BODY  | 不支持         | -                                                                                                                                                                                           |
   
表12Function、Procedure、匿名块相关关键字 
| Oracle数据库            | GaussDB数据库 | 差异                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
|:---|:---|:---|
| ACCESSIBLE BY       | 不支持         | -                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| AGGREGATE             | 支持，有差异      | - GaussDB不支持Oracle的aggregate using \[schema.\] implementation_type用法。  - GaussDB的具体用法请参见[CREATE AGGREGATE](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/gaussdb-08-0237.html)章节。   语法不同，但实现功能相同。 |
| DETERMINISTIC      | 支持，有差异       | GaussDB仅在语法上支持关键字DETERMINISTIC，未实现功能。                                                                                                                                                                                                                                                                                                                                                                                                                      |
| PIPE ROW            | 不支持          | -                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| PIPELINED          | 不支持        | -                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| SQL_MACRO          | 不支持           | -                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| RESTRICT_REFERENCES | 不支持          | -                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| INLINE                | 不支持          | -                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
   
表13异常处理相关关键字 
| Oracle数据库        | GaussDB数据库 | 差异                                                                                                                                                                                                                                                                              |
|:---|:---|:---|
| EXCEPTION_INIT  | 支持，有差异      | GaussDB不支持与系统错误码进行绑定。若在同一个存储过程或函数中通过EXCEPTION_INIT设置相同错误码，Oracle数据库不支持各自分别作为条件捕获异常，GaussDB支持此行为，详见[示例](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/gaussdb-08-0499.html#ZH-CN_TOPIC_0000002793706985__zh-cn_topic_0059777683_s962620630e7349e7b37b844648a267a1)。 |
| Exception         | 支持          | -                                                                                                                                                                                                                                                                              |
| Exception Handler | 支持            | -                                                                                                                                                                                                                                                                              |
| SQLCODE           | 支持         | -                                                                                                                                                                                                                                                                               |
| SQLERRM          | 支持          | -                                                                                                                                                                                                                                                                              |
   
表14其他PL/SQL关键字 
| Oracle数据库         | GaussDB数据库 |
|:---|:---|
| COVERAGE      | 不支持        |
| COLLATION      | 支持        |
| DEPRECATE      | 不支持        |
| FORALL         | 支持        |
| NOCOPY            | 不支持      |
| RETURNING        | 支持         |
| SERIALLY_REUSABLE | 不支持       |
| SHARING       | 不支持       |
| BULK COLLECT     | 支持         |
   
