如何保护时间戳列不受用户更新的影响

时间:2013-04-05 15:30:52

标签: oracle timestamp

我创建了一个触发器来放置两个时间戳,插入并更新。我希望永久冻结创建的时间戳,但我发现用户可以使用常规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;
/

2 个答案:

答案 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;

分享并享受。