【问题标题】:Which schema has done insert, update or delete哪个架构完成了插入、更新或删除
【发布时间】:2017-09-19 21:15:10
【问题描述】:

实际上,我正在创建一个插入或更新或删除前触发器,它将查看表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 设置为已完成更改的用户。

有什么好主意?

感谢和问候, 大卫

【问题讨论】:

  • 去掉引号:log_user := USER;

标签: sql oracle plsql triggers


【解决方案1】:

你可以像下面这样编辑。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-09
    • 2022-11-14
    • 2017-07-05
    • 1970-01-01
    • 2013-09-22
    • 1970-01-01
    • 2012-05-01
    相关资源
    最近更新 更多