ALTER TRIGGER
功能描述
Vastbase G100支持修改触发器,Vastbase G100 V2.2 Build 13在Oracle兼容模式下支持禁用和解禁触发器语法。
若不存在与待禁用触发器同名的触发器,则可以将其禁用。
若存在与待禁用触发器同名的触发器,则执行不生效。
注意事项
禁用和解禁触发器功能仅在数据库兼容模式为Oracle时能够使用(即创建DB时DBCOMPATIBILITY='A'),在其他数据库兼容模式下不能使用该特性。
禁用和解禁触发器语法需要用户具有触发器的owner权限(即为PG_TRIGGER.tgowner中记录的用户)或超级用户权限。
当禁用的触发器存在同名触发器,则执行不成功。
语法格式
ALTER TRIGGER name DISABLE
ALTER TRIGGER name ENABLE [ ALWAYS | REPLICA ]
ALTER TRIGGER name ON table_name RENAME TO new_name
参数说明
name
要修改的现有触发器名。
new name
触发器的新名称。
table_name
触发器依赖的表的名称。
DIASBLE | ENABLE
DIASBLE表示禁用触发器。
ENABLE表示对触发器解禁。
ALWAYS | REPLICA
被配置为ENABLE ALWAYS的触发器的触发不会考虑当前复制模式,配置为ENABLE ALWAYS的触发器都将触发。
被配置为ENABLE REPLICA的触发器只有在会话处于“replica”模式时才将被触发。
触发器机制受配置变量session_replication_role的影响,当复制角色为origin(默认值)或local时,将触发简单启用的触发器。
示例
前置步骤: 创建并切换至兼容模式为Oracle的数据库db_oracle。
CREATE DATABASE db_oracle dbcompatibility='A'; \c db_oracle
示例1 修改触发器名。
1、创建测试表和触发器。
create table tb_1 ( bill_id number(5) primary key, amount number(5) ); CREATE OR REPLACE TRIGGER tri_example BEFORE UPDATE OR DELETE OR INSERT ON tb_1 FOR EACH ROW BEGIN dbms_output.put_line('tri_example Trigger called.'); END; /
2、重命名触发器名。
ALTER TRIGGER tri_example ON tb_1 RENAME TO tri_example_new;
3、查看修改后的触发器信息。
select tgname from pg_trigger where tgname='tri_example_new';
查询结果为如下,表示修改成功:
tgname ----------------- tri_example_new (1 row)
示例2 禁用和解禁有触发器函数和没有触发器函数的insert触发器。
1、创建测试表。
create table tb_old(id int,a1 varchar(2)); create table tb_new(id int,a1 varchar(2));
2、创建触发器函数。
create or replace function fun_tri_1()return trigger as begin insert into tb_new values(new.id,new.a1); return new; end; /
3、创建触发器tri_1和tri_2。
create trigger tri_1 after insert on tb_old for each row execute procedure fun_tri_1(); create trigger tri_2 before insert on tb_old for each row begin insert into tb_new values(new.id,new.a1); end; /
4、有触发器函数时禁用和解禁触发器。
禁用触发器,并查看系统表PG_TRIGGER的tgenabled字段,其值记录了触发器在何种模式下触发。
alter trigger tri_1 disable; select tgenabled from pg_trigger where tgname='tri_1';
返回结果为D,表示触发器被禁用:
tgenabled ----------- D (1 row)
解禁触发器,并查看系统表PG_TRIGGER的tgenabled字段,其值记录了触发器在何种模式下触发。
alter trigger tri_1 enable; select tgenabled from pg_trigger where tgname='tri_1';
返回结果为O,表示触发器在“origin”和“local”模式下触发:
tgenabled ----------- O (1 row)
5、没有触发器函数时禁用和解禁触发器。
禁用触发器,并查看系统表PG_TRIGGER的[tgenabled]()字段,其值记录了触发器在何种模式下触发。
alter trigger tri_2 disable; select tgenabled from pg_trigger where tgname='tri_2';
返回结果为D,表示触发器被禁用:
tgenabled ----------- D (1 row)
解禁触发器,并查看系统表PG_TRIGGER的[tgenabled]()字段,其值记录了触发器在何种模式下触发。
alter trigger tri_2 enable; select tgenabled from pg_trigger where tgname='tri_2';
返回结果为O,表示触发器在“origin”和“local”模式下触发:
tgenabled ----------- O (1 row)
相关链接
PG_TRIGGER、CREATE TRIGGER、DROP TRIGGER