我有这张桌子,我想在插入触发器之前制作一张桌子
将检查新插入的值在A列中是否为null,然后将在B列中插入0 +将使用sysdate设置created_On
这是我想要的输出
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;
但它存在语法错误,无法弄清
答案 0 :(得分:4)
有几个错误-在某些绑定变量之前缺少:NEW,如果没有“ 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总是一个很好的参考。