一個簡單的Oracle觸發器示例

本文通過示例描述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學習論壇上交流。
來源:程式先鋒,轉載請註明本文來自程式先鋒網站
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章