Trigger
| 序号 | Oracle数据库 | GaussDB数据库 | 差异 |
|---|---|---|---|
| 1 | DML TRIGGER | 支持,有差异 | GaussDB不支持Compound DML Triggers。 |
| 2 | SYSTEM 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 | 不支持 | - |
| 序号 | 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 }。 |
| 序号 | Oracle数据库 | GaussDB数据库 | 差异 |
|---|---|---|---|
| 1 | DROP TRIGGER [ schema. ] trigger ; | 支持,有差异 | GaussDB不支持schema,需要在trigger_name后面加上ON table_name。 |
| 序号 | Oracle数据库 | GaussDB数据库 | 差异 |
|---|---|---|---|
| 1 | nested subprogram(子块) | 支持,有差异 | 不支持重载,不支持定义为自治事务,不支持SETOF的使用,仅限一个限定符引用嵌套子程序或嵌套子程序的变量。 |
| 2 | package subprogram | 支持 | - |
| 3 | standalone subprogram(包含Function & Procedure) | 支持 | - |
| 4 | 匿名块 | 支持 | - |
| 序号 | Oracle数据库 | GaussDB数据库 |
|---|---|---|
| 1 | Function | 支持 |
| 2 | Procedure | 支持 |
| 3 | 匿名块 | 支持 |
| 序号 | Oracle数据库 | GaussDB数据库 | 差异 |
|---|---|---|---|
| 1 | DETERMINISTIC | 支持,有差异 | GaussDB中为IMMUTABLE。 |
| 2 | PARALLEL_ENABLE | 不支持 | - |
| 3 | PIPELINED | 不支持 | - |
| 4 | RESULT_CACHE | 不支持 | - |
| 序号 | Oracle数据库 | GaussDB数据库 |
|---|---|---|
| 1 | IN | 支持 |
| 2 | OUT | 支持 |
| 3 | IN OUT | 支持 |
| 序号 | Oracle数据库 | GaussDB数据库 | 差异 |
|---|---|---|---|
| 1 | CREATE FUNCTION | 支持,有差异 | GaussDB不支持IF NOT EXISTS语法、 不支持sharing_clause、仅支持部分指定function属性的子句(属性的子句仅支持 invoker_rights_clause子句)、不支持关键字[ EDITIONABLE | NONEDITIONABLE ]。 |
| 2 | CREATE LIBRARY | 不支持 | - |
| 3 | CREATE PACKAGE | 支持,有差异 | GaussDB不支持IF NOT EXISTS语法、 不支持sharing_clause、仅支持部分指定package属性的子句(属性的子句仅支持 invoker_rights_clause子句)、不支持关键字[ EDITIONABLE | NONEDITIONABLE ]。 |
| 4 | CREATE PACKAGE BODY | 支持,有差异 | GaussDB不支持IF NOT EXISTS语法、 不支持sharing_clause、不支持关键字[ EDITIONABLE | NONEDITIONABLE ]。 |
| 5 | CREATE PROCEDURE | 支持,有差异 | GaussDB不支持IF NOT EXISTS语法、 不支持sharing_clause以及后面的子句、不支持关键字[ EDITIONABLE | NONEDITIONABLE ]。 |
| 6 | CREATE TRIGGER | 支持,有差异 | - |
| 7 | CREATE TYPE | 支持,有差异 | GaussDB不支持varray、object类型、UNDER语法。 |
| 8 | CREATE TYPE BODY | 不支持 | - |
| 序号 | Oracle数据库 | GaussDB数据库 | 差异 |
|---|---|---|---|
| 1 | ALTER FUNCTION | 支持,有差异 | GaussDB不支持关键字[ EDITIONABLE | NONEDITIONABLE ]、REUSE 、SETTINGS、DEBUG。 |
| 2 | ALTER LIBRARY | 不支持 | - |
| 3 | ALTER PACKAGE | 支持,有差异 | GaussDB不支持关键字[ EDITIONABLE | NONEDITIONABLE ]、REUSE 、SETTINGS、DEBUG。 |
| 4 | ALTER PROCEDURE | 支持,有差异 | GaussDB不支持关键字[ EDITIONABLE | NONEDITIONABLE ]、REUSE 、SETTINGS、DEBUG。 |
| 5 | ALTER TRIGGER | 支持,有差异 | GaussDB仅支持修改trigger名字。 |
| 6 | ALTER TYPE | 支持,有差异 | GaussDB仅支持部分语句。 |
| 序号 | Oracle数据库 | GaussDB数据库 | 差异 |
|---|---|---|---|
| 1 | DROP FUNCTION | 支持 | - |
| 2 | DROP LIBRARY | 不支持 | - |
| 3 | DROP PACKAGE | 支持 | - |
| 4 | DROP PROCEDURE | 支持 | - |
| 5 | DROP TRIGGER | 支持,有差异 | GaussDB的语法不同。 |
| 6 | DROP TYPE | 支持,有差异 | GaussDB不支持关键字FORCE、VALIDATE。 |
| 7 | DROP TYPE BODY | 不支持 | - |
| 序号 | Oracle数据库 | GaussDB数据库 | 差异 |
|---|---|---|---|
| 1 | ACCESSIBLE BY | 不支持 | - |
| 2 | AGGREGATE | 支持,有差异 |
语法不同,但实现功能相同。 |
| 3 | DETERMINISTIC | 支持,有差异 | GaussDB仅在语法上支持关键字DETERMINISTIC,未实现功能。 |
| 4 | PIPE ROW | 不支持 | - |
| 5 | PIPELINED | 不支持 | - |
| 6 | SQL_MACRO | 不支持 | - |
| 7 | RESTRICT_REFERENCES | 不支持 | - |
| 8 | INLINE | 不支持 | - |
| 序号 | Oracle数据库 | GaussDB数据库 | 差异 |
|---|---|---|---|
| 1 | EXCEPTION_INIT | 支持,有差异 | GaussDB不支持与系统错误码进行绑定 |
| 2 | Exception | 支持 | - |
| 3 | Exception Handler | 支持 | - |
| 4 | SQLCODE | 支持 | - |
| 5 | SQLERRM | 支持 | - |