Oracle觸發器調用存儲過程示例

--建立測試表B_TEST_TABLE,稍後會在本表上增長觸發器,在插入本表的同時複製一份數據到B_TEST_TABLE2中
create table B_TEST_TABLE
(
  c1 VARCHAR2(200),
  d2 DATE
);

--建立B_TEST_TABLE2表,在插入B_TEST_TABLE數據時,複製一份數據到本表中
create table B_TEST_TABLE2
(
  c1 VARCHAR2(200),
  d2 DATE
);

--建立存儲過程,往B_TEST_TABLE2中插入一條數據
create or replace procedure TestPro(C1 VARCHAR2) is
begin
  INSERT INTO B_TEST_TABLE2 VALUES (C1, SYSDATE);
  --由於此存儲過程是觸發器中調用的,因此不能增長提交命令
  --COMMIT;
end TestPro;
--下面這個斜槓不能去掉,不然會致使觸發器和存儲過程或其餘腳本編譯在同一個對象中,每一個單獨的對象都應用此符號分開(建表等操做除外)
/
--建立觸發器,before insert on b_test_table爲在插入b_test_table數據以前觸發,能夠改爲after insert on b_test_table
--或者before update on b_test_table等選項
create or replace trigger TEST_TABLE_TRIGGER_INST_BF
  before insert on b_test_table  
  for each row
begin
  --調用存儲過程:new表明的是新的記錄對象,能夠直接取值或修改該記錄的每一列,:new.c1是取新紀錄的c1列值,:new.d2是取新紀錄的d2列值
  TestPro(:new.c1);
  --若是不想用存儲過程也能夠直接這樣寫
  --INSERT INTO B_TEST_TABLE2 VALUES (:new.c1, :new.d2);
end TEST_TABLE_TRIGGER_INST_BF;
/
--插入測試數據
insert into B_TEST_TABLE values ('1', sysdate);
commit;

--查詢測試表數據
select * from B_TEST_TABLE;
select * from B_TEST_TABLE2;
相關文章
相關標籤/搜索