使用Oracle中的触发器将更改记录到A表

时间:2011-12-04 00:42:17

标签: php sql oracle plsql triggers

我的一个课程有一个项目。当我们的两个表对它们进行了更改时,我们需要创建一个日志:insert / update / delete。我们需要使用Oracle Triggers和PL-SQL。在日志文件中,我们需要记录UserID,DateTime,IPAddress和Event(插入/更新/删除)。我知道如何设置触发器,但我遇到的主要问题是UserID(登录到位于Users表中的UserID的PHP站点),更重要的是IPAddress。这是我到目前为止所拥有的。

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;

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

有两个伪列:uid和user,你可以在你的values子句中使用它们,下面的sql返回客户端的ip地址:

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