--创建触发器createorreplacetrigger ChuFaQiName
before updateorinserton TableName for each rowbegin
:new.G_FILED10 := REGEXP_SUBSTR(:new.G_COORDINATE,'[^]]+',19,1,'c');end ChuFaQiName;
查询触发器
--查询触发器,按表空间select owner,trigger_name,table_name,trigger_type,trigger_body from all_triggers where owner=''
删除触发器
--删除触发器droptrigger ChuFaQiName;
触发器示例
--触发器createorreplacetrigger 名字
before|afterinsert|delete|updateon 表名
for each rowbeginsql 语句 ;--必须要加分号结束sql语句。end;-- :new 新添加到数据库的当前这条数据记录-- :old 要删除或者修改的原数据-- :new.字段 新添加到数据库的当前这条数据中的指定字段
文档示例
触发器
--------------------------------------------------------------------------------
创建触发器:
CREATE [OR REPLACE] TRIGGER <触发器名>
BEFORE|AFTER
INSERT|DELETE|UPDATE [OF <列名>] ON <表名>
[FOR EACH ROW]
WHEN (<条件>)
<pl/sql块>
关键字"BEFORE"在操作完成前触发;"AFTER"则是在操作完成后触发;
关键字"FOR EACH ROW"指定触发器每行触发一次.
关键字"OF <列名>" 不写表示对整个表的所有列.
WHEN (<条件>)表达式的值必须为"TRUE".
特殊变量:
:new --为一个引用最新的列值;
:old --为一个引用以前的列值;
这些变量只有在使用了关键字 "FOR EACH ROW"时才存在.且update语句两个都有,而insert只有:new ,delect 只有:old;
使用RAISE_APPLICATION_ERROR
语法:RAISE_APPLICATION_ERROR(错误号(-20000到-20999),消息[,{true|false}]);
抛出用户自定义错误.
如果参数为'TRUE',则错误放在先前的堆栈上.
INSTEAD OF 触发器
INSTEAD OF 触发器主要针对视图(VIEW)将触发的dml语句替换成为触发器中的执行语句,而不执行dml语句.
禁用某个触发器
ALTER TRIGGER <触发器名> DISABLE
重新启用触发器
ALTER TRIGGER <触发器名> ENABLE
禁用所有触发器
ALTER TRIGGER <触发器名> DISABLE ALL TRIGGERS
启用所有触发器
ALTER TRIGGER <触发器名> ENABLE ALL TRIGGERS
删除触发器
DROP TRIGGER <触发器名>
触发器创建触发器查询触发器删除触发器触发器示例创建触发器--创建触发器create or replace trigger ChuFaQiNamebefore update or insert on TableName for each row begin :new.G_FILED10 := REGEXP_SUBSTR(:new.G_COORDINATE, '[^]]+', 19,1,'c'); end ChuFaQi