2011-12-04 35 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

我无法让我的触发器创建。你能帮我解决我所创造的任何语法错误吗? –