在引入Oracle插入触发器的WHEN原因中,引用OLD的内容是什么?
发布时间:2021-04-02 17:41:02 所属栏目:站长百科 来源:网络整理
导读:在Oracle中编写行级触发器时,我知道您可以行使OLD和NEW伪记录来引用触发触发器的行的旧状态和新状态.我知道在INSERT触发器中OLD不包括任何数据,但我不确定这会怎样影响该触发器的WHEN子句的评估.譬喻,假如我有以下触发器: CREATE OR REPLACE TRIGGER mung_r
在Oracle中编写行级触发器时,我知道您可以行使OLD和NEW伪记录来引用触发触发器的行的旧状态和新状态.我知道在INSERT触发器中OLD不包括任何数据,但我不确定这会怎样影响该触发器的WHEN子句的评估.譬喻,假如我有以下触发器: CREATE OR REPLACE TRIGGER mung_row BEFORE INSERT OR UPDATE ON some_table FOR EACH ROW BEGIN :NEW.foo = 'some val'; END; 而且我想修改此触发器以仅在foo早年为null时运行更新,但始终在插入上运行,我可以通过添加WHERE子句来满意变动的更新部门: CREATE OR REPLACE TRIGGER mung_row BEFORE INSERT OR UPDATE ON some_table FOR EACH ROW WHEN (OLD.foo IS NULL) BEGIN :NEW.foo = 'some val'; END; 这会在插入案例中引起题目吗? OLD.foo将在INSERT中评估什么? 我知道我可以拆分INSERT和UPDATE触发器或在触发器体中行使INSERTING / UPDATING / DELETING,但我不想在开导这个题目的环境下. 办理要领插入记录时,OLD的每个字段都将为NULL,包罗表界说中标志为NOT NULL的字段.譬喻,假设您的表具著名为id的非可空列: CREATE TABLE some_table ( id NUMBER NOT NULL,foo VARCHAR2(100) ) 将记录插入此表时,OLD.id将为NULL.可是,在此表中更新记录时,OLD.id将不为NULL.由于您只想变动:NEW.foo假如正在更新记录,您只需搜查OLD.id是否具有非空值. CREATE OR REPLACE TRIGGER mung_row BEFORE INSERT OR UPDATE ON some_table FOR EACH ROW WHEN (OLD.id IS NOT NULL AND OLD.foo IS NULL) BEGIN :NEW.foo = 'some val'; END; (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |