本文經過示例描述Oracle中的觸發器的寫法,旨在描述一個簡單記錄監控日誌的的觸發器的寫法。但願對初學者能有幫助.
1. 準備工做:
1) 建立一張表,在SQLplus控制檯執行以下腳本:
CREATE TABLE PRODUCT
(
"ID" VARCHAR(10) NOT NULL,
"NAME" VARCHAR(10) NOT NULL,
"PRICE" NUMBER(10),
PRIMARY KEY("ID")
);
2) 插入一些測試數據,在SQLplus控制檯執行以下腳本:
INSERT INTO PRODUCT(ID,NAME,PRICE) VALUES('1','CAT',50);
INSERT INTO PRODUCT(ID,NAME,PRICE) VALUES('2','DOG',25);
INSERT INTO PRODUCT(ID,NAME,PRICE) VALUES('3','FISH',42);
INSERT INTO PRODUCT(ID,NAME,PRICE) VALUES('4','PIGEON',34);
2. 建立一張表,在SQLplus控制檯執行以下腳本:
create table product_update_log
(
id number(5) not null,
username varchar(10),
operation varchar(6),
operatetime date,
primary key(id)
);
3.建立一個序列,在SQLplus控制檯執行以下腳本:
create sequence logsequence start with 1 maxvalue 999;
4.建立一個觸發器,在SQLplus控制檯執行以下腳本:
create or replace trigger product_log
after insert or update or delete
on product
declare
operation product_update_log.operation%TYPE;
begin
if inserting then
operation := 'insert';
elsif updating then
operation := 'update';
elsif deleting then
operation := 'delete';
else
operation := 'unknown';
end if;
dbms_output.put_line(operation);
insert into product_update_log values(logsequence.nextval,user,operation,sysdate);
dbms_output.put_line('success');
end;
/
5. 測試
update PRODUCT set price=24 where id=3;
這時控制檯輸出:
update
success
而後在SQLPlus去查詢product_update_log表中內容,發現應該多了一條記錄:
ID USERNAME OPERATION OPERATETIME
---------- -------------------- ------------ --------------
1 SYSTEM update 30-04-08
這說明咱們的觸發器起了做用,之後只要是對product表有insert,update或者delete操做動做的,Oracle數據庫服務會自動記錄一條記錄在這張表中。
到這裏所有完成了,若是讀者有問題的話,歡迎到程式先鋒Java學習論壇上交流。
來源:程式先鋒,轉載請註明本文來自程式先鋒網站