哪个架构已完成插入,更新或删除

时间:2017-09-19 11:40:07

标签: sql oracle plsql triggers

实际上,我正在创建一个插入或更新或删除触发器,它将在表IMP_CUSTOMER上查找,并将已更新,插入或删除的数据集记录到表LOG_IMP_CUSTOMER中。一切正常,但我错过了一点:

表中的数据可以由不同的数据库用户更改,我试图让已经对表进行了更改的用户也记录到我的日志表中。

这是我的触发器,直到现在:

CREATE OR REPLACE TRIGGER TRG_LOG_IMP_CUSTOMER
BEFORE INSERT OR UPDATE OR DELETE ON IMP_CUSTOMER
REFERENCING OLD AS old_buffer NEW AS new_buffer FOR EACH ROW
DECLARE
log_date TIMESTAMP;
sql_type VARCHAR(1);
log_user VARCHAR(10);
BEGIN
-- set log_date
log_date := SYSDATE;

-- set sql_type
IF INSERTING THEN sql_type := 'I';
END IF;
IF UPDATING THEN sql_type := 'U';
END IF;
IF DELETING THEN sql_type := 'D';
END IF;

-- set log_user
log_user := 'USER'; -- hardcoded for test

-- log update and delete
IF UPDATING OR DELETING THEN
    INSERT INTO LOG_IMP_CUSTOMER VALUES (:old_buffer.CIF_ID,:old_buffer.PHONE_NUMBER,:old_buffer.PHONE_AREACODE,SEQ_LOG_IMP_CUSTOMER.nextval,log_date,sql_type,log_user);
END IF;

-- log insert
IF INSERTING THEN
    INSERT INTO LOG_IMP_CUSTOMER VALUES
    (:new_buffer.CIF_ID,:new_buffer.PHONE_NUMBER,:new_buffer.PHONE_AREACODE,SEQ_LOG_IMP_CUSTOMER.nextval,log_date,sql_type,log_user);
END IF;
END;
/

我只是搜索任何方法将log_user设置为已完成更改的用户。

一些好主意?

谢谢和问候, 大卫

1 个答案:

答案 0 :(得分:0)

你可以编辑如下。

log_user := sys_context('USERENV','SESSION_USER');