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数据库名为*_TRIGGERS的视图统计了trigger的相关信息,GaussDB相关视图与Oracle存在差异,GaussDB视图具体请参见《开发指南》中“系统表和系统视图 > 系统视图 > 其他视图”中的DB_TRIGGERS、ADM_TRIGGERS、MY_TRIGGERSDB_TRIGGERS、ADM_TRIGGERS、MY_TRIGGERS章节。
序号 |
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 ]。 具体语法请参见《开发指南》中”SQL参考 > SQL语法 > C >CREATE FUNCTION ”章节。 |
2 |
CREATE LIBRARY |
不支持 |
- |
3 |
CREATE PACKAGE |
支持,有差异 |
GaussDB不支持IF NOT EXISTS语法、 不支持sharing_clause、仅支持部分指定package属性的子句(属性的子句仅支持 invoker_rights_clause子句)、不支持关键字[ EDITIONABLE | NONEDITIONABLE ]。 具体语法请参见《开发指南》中”SQL参考 > SQL语法 > C >CREATE PACKAGE ”章节。 |
4 |
CREATE PACKAGE BODY |
支持,有差异 |
GaussDB不支持IF NOT EXISTS语法、 不支持sharing_clause、不支持关键字[ EDITIONABLE | NONEDITIONABLE ]。 具体语法请参见《开发指南》中”SQL参考 > SQL语法 > C >CREATE PACKAGE ”章节。 |
5 |
CREATE PROCEDURE |
支持,有差异 |
GaussDB不支持IF NOT EXISTS语法、 不支持sharing_clause以及后面的子句、不支持关键字[ EDITIONABLE | NONEDITIONABLE ]。 具体语法请参见《开发指南》中”SQL参考 > SQL语法 > C >CREATE PROCEDURE ”章节。 |
6 |
CREATE TRIGGER |
支持,有差异 |
GaussDB的具体语法请参见《开发指南》中”SQL参考 > SQL语法 > C >CREATE TRIGGER ”章节。 |
7 |
CREATE TYPE |
支持,有差异 |
GaussDB不支持varray、object类型、UNDER语法。 具体语法请参见《开发指南》中”SQL参考 > SQL语法 > C >CREATE TYPE ”章节。 |
8 |
CREATE TYPE BODY |
不支持 |
- |
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
ALTER FUNCTION |
支持,有差异 |
GaussDB不支持关键字[ EDITIONABLE | NONEDITIONABLE ]、REUSE 、SETTINGS、DEBUG。 具体语法请参见《开发指南》中”SQL参考 > SQL语法 > A > ALTER FUNCTION ”章节。 |
2 |
ALTER LIBRARY |
不支持 |
- |
3 |
ALTER PACKAGE |
支持,有差异 |
GaussDB不支持关键字[ EDITIONABLE | NONEDITIONABLE ]、REUSE 、SETTINGS、DEBUG。 具体语法请参见《开发指南》中”SQL参考 > SQL语法 > A > ALTER PACKAGE ”章节。 |
4 |
ALTER PROCEDURE |
支持,有差异 |
GaussDB不支持关键字[ EDITIONABLE | NONEDITIONABLE ]、REUSE 、SETTINGS、DEBUG。 具体语法请参见《开发指南》中”SQL参考 > SQL语法 > A > ALTER PROCEDURE ”章节。 |
5 |
ALTER TRIGGER |
支持,有差异 |
GaussDB仅支持修改trigger名字。 具体语法请参见《开发指南》中”SQL参考 > SQL语法 > A > ALTER TRIGGER ”章节。 |
6 |
ALTER TYPE |
支持,有差异 |
GaussDB仅支持部分语句。 具体语法请参见《开发指南》中”SQL参考 > SQL语法 > A > ALTER TYPE ”章节。 |
序号 |
Oracle数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
DROP FUNCTION |
支持 |
- |
2 |
DROP LIBRARY |
不支持 |
- |
3 |
DROP PACKAGE |
支持 |
- |
4 |
DROP PROCEDURE |
支持 |
- |
5 |
DROP TRIGGER |
支持,有差异 |
GaussDB的语法不同。 具体语法可参考:请参见《开发指南》中”SQL参考 > SQL语法 > D > DROP TRIGGER ”章节。 |
6 |
DROP TYPE |
支持,有差异 |
GaussDB不支持关键字FORCE、VALIDATE。 具体语法请参见《开发指南》中”SQL参考 > SQL语法 > D > DROP TYPE ”章节。 |
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 |
支持 |
- |