触发器学习

来源:互联网 发布:网络用语什么叫狗粮 编辑:程序博客网 时间:2024/05/22 03:12

                                              触发器学习

查询触发器:

select table_owner, table_name,trigger_body from user_triggers

删除触发器:

DROP TRIGGER trigger_name

(但触发器一般是这样建的:create or replace ... 也就是如果存在的话,就可以替换)。

 

demo1:

使用触发器实现对or_long_test的表DML操作时,把操作记录在另一张表or_long_test_log里。

#建表:

create table OR_LONG_TEST(
    int_id number(10) primary key,
    vc_user_name varchar2(30),
    int_age number(3),
    vc_comment varchar2(80)
);

insert into OR_LONG_TEST(int_id,vc_user_name,int_age) values(1,'张家港',28);
insert into OR_LONG_TEST(int_id,vc_user_name,int_age) values(2,'李静',24);

#日志表
create table or_long_test_log( vc_user_name varchar2(30),action varchar2(20), time date);

#触发器:
create or replace trigger biud_or_long_test_log
after insert or update or delete
on or_long_test
declare
l_action or_long_test_log.action %type;
Begin
    if inserting then
        l_action:='Insert';
    elsif updating then
        l_action:='Update';
    elsif deleting then
        l_action:='Delete';
    else  raise_application_error(-20001,'You should never ever get this error.');
    end if;
    insert into or_long_test_log(vc_user_name,action,time)
    values(user,l_action,sysdate);
End;

 

demo2: 实现数据同步

对把对表or_long_test 增、删、改 的数据同步到or_long_test_copy

 

先建表:
create table or_long_test_copy as select * from or_long_test

建触发器:

create or replace trigger buid_or_long_test_copy
    after insert or update or delete
    on  or_long_test
    referencing old as old_value
                new as new_value
    for each row
begin
    if inserting then
      insert into or_long_test_copy(int_id,vc_user_name,int_age)
      values(:new_value.int_id, :new_value.vc_user_name, :new_value.int_age);
    elsif updating then
      update or_long_test_copy set vc_user_name = :new_value.vc_user_name, int_age= :new_value.int_age
      where int_id = :new_value.int_id;
    elsif deleting then
      delete from or_long_test_copy where int_id = :old_value.int_id;
    end if; 
end; 

 

insert 一条数据:

insert into OR_LONG_TEST(int_id,vc_user_name,int_age) values(7,'周杰伦',32)

update or_long_test set vc_user_name = '林子祥' where int_id =5

 

 INT_ID VC_USER_NAME INT_AGE VC_COMMENT
1             张家港                            28 
2             李静                                 24 
3             陈明                                 26 
4            林海                                  30 
5            林子祥                             29 
6            陈静                                 18 
7           周杰伦                               32 

 

参考:

http://gaogengzhi.iteye.com/blog/266505

 

http://gaogengzhi.iteye.com/blog/266530

http://www.cnblogs.com/huyong/archive/2011/04/27/2030466.html

 

原创粉丝点击