
# Trigger
表1trigger类型 
| 序号 | Oracle数据库      | GaussDB数据库 | 差异                               |
|:---|:---|:---|:---|
| 1  | DML TRIGGER    | 支持，有差异     | GaussDB不支持Compound DML Triggers。 |
| 2  | SYSTEM TRIGGER | 不支持        | -                                |
   
表2create trigger 
| 序号 | Oracle数据库                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | GaussDB数据库 | 差异                                                                                                                                                                                                                                                                                                                     |
|:---|:---|:---|:---|
| 1  | create语法： CREATE \[ OR REPLACE \] \[ EDITIONABLE \| NONEDITIONABLE \] TRIGGER plsql_trigger_source                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | 支持，有差异     | GaussDB不支持OR REPLACE 、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，仅支持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                                                                                                                                                                      | 不支持        | -                                                                                                                                                                                                                                                                                                                      |
   
表3alter 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 }。 |
   
表4drop 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_TRIGGERS章节。
表5Nested, Package, and Standalone Subprograms 兼容性 
| 序号 | Oracle数据库                                      | GaussDB数据库 | 差异                                                                                                                                                                                                                                |
|:---|:---|:---|:---|
| 1  | nested subprogram（子块）                          | 支持，有差异     | GaussDB不支持重载。 GaussDB不支持定义为自治事务。 GaussDB不支持SETOF的使用，仅限一个限定符引用嵌套子程序或嵌套子程序的变量。 |
| 2  | package subprogram                             | 支持         | -                                                                                                                                                                                                                                 |
| 3  | standalone subprogram（包含Function \& Procedure） | 支持         | -                                                                                                                                                                                                                                 |
| 4  | 匿名块                                            | 支持         | -                                                                                                                                                                                                                                 |
   
表6RETURN语句支持情况 
| 序号 | Oracle数据库 | GaussDB数据库 |
|:---|:---|:---|
| 1  | Function  | 支持         |
| 2  | Procedure | 支持         |
| 3  | 匿名块       | 支持         |
   
表7Function相关参数 
| 序号 | Oracle数据库       | GaussDB数据库 | 差异                  |
|:---|:---|:---|:---|
| 1  | DETERMINISTIC   | 支持，有差异     | GaussDB中为IMMUTABLE。 |
| 2  | PARALLEL_ENABLE | 不支持        | -                   |
| 3  | PIPELINED       | 不支持        | -                   |
| 4  | RESULT_CACHE    | 不支持        | -                   |
   
表8参数形式支持 
| 序号 | Oracle数据库 | GaussDB数据库 |
|:---|:---|:---|
| 1  | IN        | 支持         |
| 2  | OUT       | 支持         |
| 3  | IN OUT    | 支持         |
   
表9CREATE语句 
| 序号 | Oracle数据库           | GaussDB数据库 | 差异                                                                                                                                                                                                                                                                                           |
|:---|:---|:---|:---|
| 1  | CREATE FUNCTION     | 支持，有差异     | GaussDB不支持IF NOT EXISTS语法、不支持sharing_clause、仅支持部分指定function属性的子句（属性的子句仅支持 invoker_rights_clause子句）、不支持关键字\[ EDITIONABLE \| NONEDITIONABLE \]。 GaussDB的具体语法请参见《开发指南》中"SQL参考 \> SQL语法 \> C \>CREATE FUNCTION "章节。 |
| 2  | CREATE LIBRARY      | 不支持        | -                                                                                                                                                                                                                                                                                            |
| 3  | CREATE PACKAGE      | 支持，有差异     | GaussDB不支持IF NOT EXISTS语法、不支持sharing_clause、仅支持部分指定package属性的子句（属性的子句仅支持 invoker_rights_clause子句）、不支持关键字\[ EDITIONABLE \| NONEDITIONABLE \]。 GaussDB的具体语法请参见《开发指南》中"SQL参考 \> SQL语法 \> C \>CREATE PACKAGE "章节。      |
| 4  | CREATE PACKAGE BODY | 支持，有差异     | GaussDB不支持IF NOT EXISTS语法、不支持sharing_clause、不支持关键字\[ EDITIONABLE \| NONEDITIONABLE \]。 GaussDB的具体语法请参见《开发指南》中"SQL参考 \> SQL语法 \> C \>CREATE PACKAGE "章节。                                                           |
| 5  | CREATE PROCEDURE    | 支持，有差异     | GaussDB不支持IF NOT EXISTS语法、不支持sharing_clause子句、不支持关键字\[ EDITIONABLE \| NONEDITIONABLE \]。 GaussDB的具体语法请参见《开发指南》中"SQL参考 \> SQL语法 \> C \>CREATE PROCEDURE "章节。                                                     |
| 6  | CREATE TRIGGER      | 支持，有差异     | GaussDB的具体语法请参见《开发指南》中"SQL参考 \> SQL语法 \> C \>CREATE TRIGGER "章节。                                                                                                                                                                                                                             |
| 7  | CREATE TYPE         | 支持，有差异     | GaussDB不支持varray、object类型、UNDER语法。 GaussDB的具体语法请参见《开发指南》中"SQL参考 \> SQL语法 \> C \>CREATE TYPE "章节。                                                                                                                  |
| 8  | CREATE TYPE BODY    | 不支持        | -                                                                                                                                                                                                                                                                                            |
   
表10ALTER语句 
| 序号 | Oracle数据库       | GaussDB数据库 | 差异                                                                                                                                                                                                                    |
|:---|:---|:---|:---|
| 1  | ALTER FUNCTION  | 支持，有差异     | GaussDB不支持关键字\[ EDITIONABLE \| NONEDITIONABLE \]、REUSE 、SETTINGS、DEBUG。 GaussDB的具体语法请参见《开发指南》中"SQL参考 \> SQL语法 \> A \> ALTER FUNCTION "章节。 |
| 2  | ALTER LIBRARY   | 不支持        | -                                                                                                                                                                                                                     |
| 3  | ALTER PACKAGE   | 支持，有差异     | GaussDB不支持关键字\[ EDITIONABLE \| NONEDITIONABLE \]、REUSE 、SETTINGS、DEBUG。 GaussDB的具体语法请参见《开发指南》中"SQL参考 \> SQL语法 \> A \> ALTER PACKAGE "章节。  |
| 4  | ALTER PROCEDURE | 支持，有差异     | GaussDB不支持关键字\[ EDITIONABLE \| NONEDITIONABLE \]、REUSE 、SETTINGS、DEBUG。                                                                                                                                               |
| 5  | ALTER TRIGGER   | 支持，有差异     | GaussDB仅支持修改trigger名字。 GaussDB的具体语法请参见《开发指南》中"SQL参考 \> SQL语法 \> A \> ALTER TRIGGER "章节。                                                    |
| 6  | ALTER TYPE      | 支持，有差异     | GaussDB仅支持部分语句。 GaussDB的具体语法请参见《开发指南》中"SQL参考 \> SQL语法 \> A \> ALTER TYPE "章节。                                                              |
   
表11DROP语句 
| 序号 | Oracle数据库      | GaussDB数据库 | 差异                                                                                                                                                                    |
|:---|:---|:---|:---|
| 1  | DROP FUNCTION  | 支持         | -                                                                                                                                                                     |
| 2  | DROP LIBRARY   | 不支持        | -                                                                                                                                                                     |
| 3  | DROP PACKAGE   | 支持         | -                                                                                                                                                                     |
| 4  | DROP PROCEDURE | 支持         | -                                                                                                                                                                     |
| 5  | DROP TRIGGER   | 支持，有差异     | GaussDB的语法与Oracle不同。 GaussDB的具体语法请参见《开发指南》中"SQL参考 \> SQL语法 \> D \> DROP TRIGGER "章节。       |
| 6  | DROP TYPE      | 支持，有差异     | GaussDB不支持关键字FORCE、VALIDATE。 GaussDB的具体语法请参见《开发指南》中"SQL参考 \> SQL语法 \> D \> DROP TYPE "章节。 |
| 7  | DROP TYPE BODY | 不支持        | -                                                                                                                                                                     |
   
表12Function、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           | 支持         | -                     |
   
表14其他PL/SQL关键字 
| 序号 | Oracle数据库         | GaussDB数据库 |
|:---|:---|:---|
| 1  | COVERAGE          | 不支持        |
| 2  | COLLATION         | 支持         |
| 3  | DEPRECATE         | 不支持        |
| 4  | FORALL            | 支持         |
| 5  | NOCOPY            | 不支持        |
| 6  | RETURNING         | 支持         |
| 7  | SERIALLY_REUSABLE | 不支持        |
| 8  | SHARING           | 不支持        |
| 9  | BULK COLLECT      | 支持         |
   
