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

Oracle 如何保护时间戳列不受用户更新的影响,oracle,timestamp,Oracle,Timestamp,我创建了一个触发器来放置两个时间戳,插入并更新。我希望创建的时间戳永远冻结,但我发现用户可以直接(在正常插入之后)使用常规的SQL update语句更新它。如何保护创建的TSC不受用户更新的影响 这是扳机 CREATE OR REPLACE TRIGGER AAAjob_timing before insert or update on AAAJOB for each row begin CASE WHEN INSERTING THEN

我创建了一个触发器来放置两个时间戳,插入并更新。我希望创建的时间戳永远冻结,但我发现用户可以直接(在正常插入之后)使用常规的SQL update语句更新它。如何保护创建的TSC不受用户更新的影响

这是扳机

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;
/

当用户尝试更新此列中的值时,在触发器中引发异常。

当用户尝试更新此列中的值时,在触发器中引发异常。

如何

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;
分享和享受。

怎么样

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;
共享和享受。

将此设置为一个约束(更新后)并将其作为普通用户无法成为的用户(例如系统管理员)安装,至少不要使用ease。将此设置为一个约束(更新后)并将其作为普通用户无法成为的用户(例如系统管理员)安装,至少不要使用ease