我创建了一个触发器来放置两个时间戳,插入并更新。我希望永久冻结创建的时间戳,但我发现用户可以使用常规SQL UPDATE语句直接更新(正常插入后)。如何保护tsCreated免受用户更新?
这是触发器
CREATE OR REPLACE TRIGGER AAAjob_timing
before insert or update
on AAAJOB
for each row
begin
CASE
WHEN INSERTING THEN
:new.tsCreated := sysdate;
:new.tsUpdated := :new.tsCreated;
WHEN UPDATING THEN
:new.tsUpdated := sysdate;
END CASE;
end;
/
答案 0 :(得分:2)
当用户尝试更新此列中的值时,在触发器中引发异常。
答案 1 :(得分:1)
怎么样
CREATE OR REPLACE TRIGGER AAAJOB_TRIGGER
BEFORE INSERT OR UPDATE ON AAAJOB
FOR EACH ROW
BEGIN
IF INSERTING THEN
:NEW.TSCREATED := SYSDATE;
:NEW.TSUPDATED := SYSDATE;
ELSIF UPDATING THEN
:NEW.TSCREATED := :OLD.TSCREATED;
:NEW.TSUPDATED := SYSDATE;
ENDIF;
END AAJOB_TRIGGER;
分享并享受。