2011-12-04 36 views
3

我有一個項目用於我的某個類。我們需要在兩個表格進行更改時創建日誌:insert/update/delete。我們被要求使用Oracle觸發器和PL-SQL。在日誌文件中,我們需要記錄用戶ID,日期時間,IP地址和事件(插入/更新/刪除)。我知道如何設置觸發器,但我遇到的主要問題是UserID(從用戶名登錄到Users表中登錄到PHP站點),更重要的是IPAddress。這是我到目前爲止。在Oracle中使用觸發器將更改記錄到表中

CREATE OR REPLACE TRIGGER tr_movie_ai 
AFTER INSERT OR UPDATE OR DELETE 
ON Movies 
FOR EACH ROW 
DECLARE 
    v_username VARCHAR(20); 
    v_ipaddress VARCHAR(13); 
    v_date NUMBER := FLOOR(SYSDATE); 
BEGIN 
    SELECT User INTO v_username FROM dual; 
    SELECT SYS_CONTEXT('USERENV','IP_ADDRESS') INTO v_ipaddress FROM dual; 
    INSERT INTO Logs (USERID, DATETIME, IPADDRESS, EVENT, DESCRIPTION) VALUES (user, v_date, v_ipaddress, 'Movie Created', 'Movie created')); 
END; 

任何幫助將不勝感激!

+0

這SYSTABLE可以幫助你.. HTTP:/ /docs.oracle.com/cd/B19306_01/server.102/b14237/dynviews_2088.htm – xQbert

回答

1

有兩種僞列:UID和用戶,你可以在你的價值觀子句中使用它們,下面的SQL返回客戶端的IP地址:

SELECT SYS_CONTEXT('USERENV','IP_ADDRESS') FROM dual; 
+0

我顯然有語法錯誤,無法將其添加到我的數據庫。但更重要的是,我相信這個select語句返回的IP地址是Oracle數據庫託管的服務器的IP,而不是我的IP。 –

+0

你錯了。 oracle文檔中說明了以下內容:IP_ADDRESS \t客戶端連接的計算機的IP地址。 – steve

+0

我無法讓我的觸發器創建。你能幫我解決我所創造的任何語法錯誤嗎? –