加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

在引入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;

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读