Oracle中触发器如何调用存储过程

时间:2024-03-06 18:28:49
 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