- 所讨论的触发器适用于在ODI中具有ETL的表,但用户也可以选择编辑某些列(如果要调整它们)。这是使用APEX完成的
- 触发器用于更改两列:变更人和变更日期。两者均表示仅在APEX页面上完成变更。
- 当ODI加载运行并且是MERGE INSERT UPDATE时,问题出现,Trigger认为其更新并将上述两列更改为“NULL”,因为其是由ODI手动更新的,而不是在APEX上。
溶液
- 对于每个“可编辑列”,应有一个检查“新”的逻辑:〈〉:旧的,但由于我有15列需要写大量的代码.
是否有其他方法可以实现这一目标?
create or replace TRIGGER DW.TRG BEFORE
UPDATE ON DW.TABLE
REFERENCING
NEW AS new
OLD AS old
FOR EACH ROW
BEGIN
IF updating THEN
SELECT
SYSDATE,
v('APP_USER')
INTO
:new.changed_on_dt,
:new.changed_by
FROM
dual;
END IF;
END;
2条答案
按热度按时间slmsl1lt1#
检查当前数据库会话是否存在apex会话,并仅在存在apex会话时执行。
附注
SELECT FROM DUAL
,您可以只在触发器中赋值。5t7ly7z52#
你可以让它永远不会用空值覆盖非空值: