Использование триггера в Oracle для регистрации изменений в таблице - PullRequest
3 голосов
/ 04 декабря 2011

У меня есть проект для одного из моих классов. Нам нужно создать журнал, когда в две из наших таблиц внесены изменения: insert / update / delete. Мы обязаны использовать Oracle Triggers и 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;

Любая помощь будет принята с благодарностью!

1 Ответ

1 голос
/ 04 декабря 2011

Существует два псевдоколонки: uid и user, вы можете использовать их в своем предложении values, а следующий sql возвращает ip-адрес клиента:

SELECT SYS_CONTEXT('USERENV','IP_ADDRESS') FROM dual;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...