oracle使用存儲過程實現日志記錄.sql


--這段sql語句是用來實現oracle后台記錄操作日志的,代替或者補充應用系統的操作日志。

--1.對應的日志記錄表
-------------------------------------------------------------------
create table TEST
(
  T_ID   NUMBER(4),
  T_NAME VARCHAR2(20),
  T_AGE  NUMBER(2),
  T_SEX  CHAR(1)
);
----------------------對應的日志記錄表---------------------------END

--2.建立觸發器(觸發器實現日志記錄)

--2.1開啟屏幕輸出:(需要在命令行登陸sqlplus后執行)
sql>set serveroutput on;--在doc窗口和tomcat下可以捕捉到這些輸出信息。
------------------------------------------------------------------

CREATE OR REPLACE TRIGGER test_trigger 
AFTER DELETE OR INSERT OR UPDATE ON test for each row -- for each row是為了使用:new和old
DECLARE
v_type VARCHAR2(15);
BEGIN
IF INSERTING THEN 
  v_type := 'INSERT'||:new.T_NAME;--oracle添加鏈接字符串使用||
  DBMS_OUTPUT.PUT_LINE('記錄'||:new.T_NAME||'已經成功插入,並已記錄到日志');--添加 只有new
ELSIF UPDATING THEN 
  v_type := 'UPDATE'||:old.T_NAME;
  DBMS_OUTPUT.PUT_LINE('記錄'||:old.T_NAME||'已經成功更新,並已記錄到日志');--更新有new和old
ELSIF DELETING THEN
  v_type := 'DELETE'||:old.T_NAME;
  DBMS_OUTPUT.PUT_LINE('記錄'||:old.T_NAME||'已經成功刪除,並已記錄到日志');--刪除只有old
END IF;
  my_pro(v_type);
END;
----------------------建立觸發器------------------------------------END

--3.建立日志表。
----------------------------------------------------------------
create table TEST_LOG_1
(
  L_USER VARCHAR2(15),
  L_TYPE VARCHAR2(15),
  L_DATE VARCHAR2(30)
);
--------------------建立日志表---------------------------------END


--4.建存儲過程(注意一定要加上PRAGMA AUTONOMOUS_TRANSACTION;讓這個存儲過程有自治的事務控制,不然會影響A的事務控制)
----------------------------------------------------------------
create or replace procedure my_pro(v_type varchar2)
as
PRAGMA AUTONOMOUS_TRANSACTION;--設置為自治事務且必須加上commit,否則報commit非法。
begin
       INSERT INTO TEST_LOG_1 VALUES(user,v_type,TO_CHAR(sysdate,'yyyy-mm-dd hh24:mi:ss'));
       commit;
end;
-------------------建存儲過程-------------------------------------END

--最后我們在A中輸入以下測試語句:
INSERT INTO test VALUES(1,'zhao',22,'M');
UPDATE test SET t_name = '30' WHERE t_id = 1;
DELETE test WHERE t_id = 1;

SELECT * FROM test;
SELECT * FROM TEST_LOG_1;

 


免責聲明!

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



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