我一直试着用几个小时来绕过这个,我不确定是否可能。我目前正在为数据库开发一些触发器,其中一个声明在特定的表中,只能修改一个属性。其余的不能在原始输入后更改。
这实际上可行吗?
答案 0 :(得分:1)
在Oracle中,这很容易,我一直这样做。我有很多表格,其中包含CREATED_DT,CREATED_BY列,我只想在创建记录时设置它。每次更改记录时都会设置MODIFIED_DT,MODIFIED_BY。触发器显示如下:
CREATE OR REPLACE TRIGGER myschema.BILLING_SUMMARY_CHARGE_TRG
BEFORE INSERT OR UPDATE
ON myschema.billing_summary_charge
REFERENCING NEW AS new OLD AS old
FOR EACH ROW
BEGIN
:new.modified_dt := SYSDATE;
:new.modified_by := USER;
IF INSERTING
THEN
:new.i_charge_pk := billing_summary_charge_seq_pk.NEXTVAL;
:new.created_dt := :new.modified_dt;
:new.created_by := :new.modified_by;
END IF;
-- Don't allow creation columns to change on an update
IF UPDATING
THEN
:new.i_charge_pk := :old.i_charge_pk;
:new.created_dt := :old.created_dt;
:new.created_by := :old.created_by;
END IF;
END billing_summary_charge_trg;
在上面的示例中,插入记录时初始化列i_charge_pk,created_dt和created_by。更新记录时会为它们分配旧值,以防止应用程序发生任何可能的更改。