如果其他列为空,如何使 beforeInsert 触发器在列中设置特定值
how to make beforeInsert trigger to set specific value in column if other column is null
我有这个 table ,我想在插入触发器之前制作
这将检查新插入的值是否在 A 列中为空,然后它将在 B 列中插入 0 + 它将 created_On 设置为 sysdate
这是我想要的输出
COLUMN_A COLUMN_B CREATED_BY UPDATE_BY
null 0 sysdate sysdate
12 1 sysdate sysdate
这是我的触发器
CREATE OR REPLACE TRIGGER SCH.TABLEA_TRG BEFORE
INSERT or update
ON SCH.TABLEA REFERENCING OLD AS old NEW AS new
FOR EACH ROW
begin
if inserting then
:NEW.CREATED_ON := sysdate ;
:NEW.UPDATED_ON := sysdate ;
if :COLUMN_A is null
then set :new.COLUMN_B 0
else :COLUMN_A is not null
then set :new.COLUMN_B 1
elsif updating then
:NEW.UPDATED_ON := sysdate ;
end if;
end;
但是它有语法错误,无法理解
有几个错误 - 在某些绑定变量之前缺少 :NEW,缺少 end if,没有 "set" 命令,列名不正确。这似乎可以编译。
CREATE OR REPLACE TRIGGER tablea_trg BEFORE
INSERT OR UPDATE ON tablea
REFERENCING
OLD AS old
NEW AS new
FOR EACH ROW
BEGIN
IF inserting THEN
:new.created_on := SYSDATE;
:new.updated_on := SYSDATE;
IF :new.column_a IS NULL THEN
:new.column_b := 0;
ELSE
IF :new.column_a IS NOT NULL THEN
:new.column_b := 1;
END IF;
END IF;
ELSIF updating THEN
:new.updated_on := SYSDATE;
END IF;
END;
无论多么枯燥,Oracle Help 总是一个很好的参考。
我有这个 table ,我想在插入触发器之前制作
这将检查新插入的值是否在 A 列中为空,然后它将在 B 列中插入 0 + 它将 created_On 设置为 sysdate
这是我想要的输出
COLUMN_A COLUMN_B CREATED_BY UPDATE_BY
null 0 sysdate sysdate
12 1 sysdate sysdate
这是我的触发器
CREATE OR REPLACE TRIGGER SCH.TABLEA_TRG BEFORE
INSERT or update
ON SCH.TABLEA REFERENCING OLD AS old NEW AS new
FOR EACH ROW
begin
if inserting then
:NEW.CREATED_ON := sysdate ;
:NEW.UPDATED_ON := sysdate ;
if :COLUMN_A is null
then set :new.COLUMN_B 0
else :COLUMN_A is not null
then set :new.COLUMN_B 1
elsif updating then
:NEW.UPDATED_ON := sysdate ;
end if;
end;
但是它有语法错误,无法理解
有几个错误 - 在某些绑定变量之前缺少 :NEW,缺少 end if,没有 "set" 命令,列名不正确。这似乎可以编译。
CREATE OR REPLACE TRIGGER tablea_trg BEFORE
INSERT OR UPDATE ON tablea
REFERENCING
OLD AS old
NEW AS new
FOR EACH ROW
BEGIN
IF inserting THEN
:new.created_on := SYSDATE;
:new.updated_on := SYSDATE;
IF :new.column_a IS NULL THEN
:new.column_b := 0;
ELSE
IF :new.column_a IS NOT NULL THEN
:new.column_b := 1;
END IF;
END IF;
ELSIF updating THEN
:new.updated_on := SYSDATE;
END IF;
END;
无论多么枯燥,Oracle Help 总是一个很好的参考。