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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM