1. 程式人生 > 其它 >Oracle中觸發器如何呼叫儲存過程

Oracle中觸發器如何呼叫儲存過程

 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