语法规则:
Create [or replace] trigger [模式.]触发器名
Before| after insert|delete|(update of 列名)
On 表名
[for each row]
When 条件
PL/SQL块
说明:
For each row的意义是:在一次操作表的语句中,每操作成功一行就会触发一次;不写的话,表示是表级触发器,则无论操作多少行,都只触发一次;
When条件的出现说明了,在DML操作的时候也许一定会触发触发器,但是触发器不一定会做实际的工作,比如when 后的条件不为真的时候,触发器只是简单地跳过了PL/SQL块;
例子(此例中带了clob字段类型的处理):
CREATE OR REPLACE TRIGGER insert_chart
BEFORE
INSERT
ON tb_store_chatrecord
REFERENCING NEW AS New
FOR EACH ROW
when (NEW.cusservice LIKE '网游交易客服%' )
declare
thecontent varchar2(4000);
BEGIN
thecontent:=dbms_lob.substr(:NEW.content,4000,1);
INSERT INTO BOSS_WW_CHARTRECORD@gm (ID,customernick,kfnicky,chartcontent,DIRECTION,charttime)
select :NEW.crid,:NEW.wangwang,:NEW.cusservice,thecontent,:NEW.DIRECTION,:NEW.createdate from dual ;
END;
关键字:
:NEW 和:OLD使用方法和意义,new 只出现在insert和update时,old只出现在update和delete时。在insert时new表示新插入的行数据,update时new表示要替换的新数据、old表示要被更改的原来的数据行,delete时old表示要被删除的数据。
注意:
在触发器中不能使用commit。
Create [or replace] trigger [模式.]触发器名
Before| after insert|delete|(update of 列名)
On 表名
[for each row]
When 条件
PL/SQL块
说明:
For each row的意义是:在一次操作表的语句中,每操作成功一行就会触发一次;不写的话,表示是表级触发器,则无论操作多少行,都只触发一次;
When条件的出现说明了,在DML操作的时候也许一定会触发触发器,但是触发器不一定会做实际的工作,比如when 后的条件不为真的时候,触发器只是简单地跳过了PL/SQL块;
例子(此例中带了clob字段类型的处理):
CREATE OR REPLACE TRIGGER insert_chart
BEFORE
INSERT
ON tb_store_chatrecord
REFERENCING NEW AS New
FOR EACH ROW
when (NEW.cusservice LIKE '网游交易客服%' )
declare
thecontent varchar2(4000);
BEGIN
thecontent:=dbms_lob.substr(:NEW.content,4000,1);
INSERT INTO BOSS_WW_CHARTRECORD@gm (ID,customernick,kfnicky,chartcontent,DIRECTION,charttime)
select :NEW.crid,:NEW.wangwang,:NEW.cusservice,thecontent,:NEW.DIRECTION,:NEW.createdate from dual ;
END;
关键字:
:NEW 和:OLD使用方法和意义,new 只出现在insert和update时,old只出现在update和delete时。在insert时new表示新插入的行数据,update时new表示要替换的新数据、old表示要被更改的原来的数据行,delete时old表示要被删除的数据。
注意:
在触发器中不能使用commit。