php - 在 Oracle 中使用触发器记录对表的更改

标签 php sql oracle plsql triggers

我有一个类(class)的项目。当我们的两个表对它们进行了更改时,我们需要创建一个日志:插入/更新/删除。我们需要使用 Oracle 触发器和 PL-SQL。在日志文件中,我们需要记录 UserID、DateTime、IPAddress 和 Event(插入/更新/删除)。我知道如何设置触发器,但我遇到的主要问题是 UserID(从登录到 PHP 站点,UserID 在 Users 表中),更重要的是 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;

如有任何帮助,我们将不胜感激!

最佳答案

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

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

关于php - 在 Oracle 中使用触发器记录对表的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8372320/

相关文章:

php - 一天租一个街区的预订系统

javascript - 如何通过多次提交和 Laravel 路由处理 AJAX 表单提交

oracle - RESULT_CACHE为空的RELIES_ON

php - (x && y || z) 和 (x AND y OR z) 之间的区别

javascript - 如何在文本框值中输入当前日期并显示我的附加数据

php - 我从数据库获取数据并在另一个查询中重用它们。重新准备它们是否多余?

sql - 表设计+SQL问题

sql - 有没有办法在 SQL 中的 GO 之后使用 block 注释?

oracle - golang中使用gorm连接Oracle数据库

oracle - sqlplus怎么连不上?