1 --创建测试表B_TEST_TABLE,稍后会在本表上增加触发器,在插入本表的同时复制一份数据到B_TEST_TABLE2中 2 create table B_TEST_TABLE 3 ( 4 c1 VARCHAR2(200), 5 d2 DATE 6 ); 7 8 --创建B_TEST_TABLE2表,在插入B_TEST_TABLE数据时,复制一份数据到本表中 9 create table B_TEST_TABLE2 10 ( 11 c1 VARCHAR2(200), 12 d2 DATE 13 ); 14 15 --创建存储过程,往B_TEST_TABLE2中插入一条数据 16 create or replace procedure TestPro(C1 VARCHAR2) is 17 begin 18 INSERT INTO B_TEST_TABLE2 VALUES (C1, SYSDATE); 19 --因为此存储过程是触发器中调用的,所以不能增加提交命令 20 --COMMIT; 21 end TestPro; 22 --下面这个斜杠不能去掉,否则会导致触发器和存储过程或其他脚本编译在同一个对象中,每个单独的对象都应用此符号分开(建表等操作除外) 23 / 24 --创建触发器,before insert on b_test_table为在插入b_test_table数据之前触发,可以改成after insert on b_test_table 25 --或者before update on b_test_table等选项 26 create or replace trigger TEST_TABLE_TRIGGER_INST_BF 27 before insert on b_test_table 28 for each row 29 begin 30 --调用存储过程:new代表的是新的记录对象,可以直接取值或修改该记录的每一列,:new.c1是取新纪录的c1列值,:new.d2是取新纪录的d2列值 31 TestPro(:new.c1); 32 --如果不想用存储过程也可以直接这样写 33 --INSERT INTO B_TEST_TABLE2 VALUES (:new.c1, :new.d2); 34 end TEST_TABLE_TRIGGER_INST_BF; 35 / 36 --插入测试数据 37 insert into B_TEST_TABLE values (\'1\', sysdate); 38 commit; 39 40 --查询测试表数据 41 select * from B_TEST_TABLE; 42 select * from B_TEST_TABLE2;
转载于:https://blog.csdn.net/weixin_34345753/article/details/91978948