我尝试在其中一个字段为空或使用以下代码为null时在插入或更新触发器中抛出异常:
if :new.reactietekst = null or :new.reactietekst = '' then
raise invalid_text;
end if;
但是当我尝试使用reactietekst字段的空值或空值进行插入时,代码似乎被忽略了。我的触发器中的其他异常工作正常。
测试插页:
insert into Reactie values (5,'Jan Janssen',to_date('21-12-2011','dd-mm-yyyy'),'89.98.10.12',null, 'NIEUW', 1);
insert into Reactie values (5,'Jan Janssen',to_date('21-12-2011','dd-mm-yyyy'),'89.98.10.12','', 'NIEUW', 1);
完整触发码:
create or replace trigger check_reactie
before update or insert
on REACTIE
for each row
declare
invalid_capitals EXCEPTION;
invalid_ip exception;
invalid_text exception;
begin
if isdutchip(:new.ipadres) = false then
raise invalid_ip;
end if;
if :new.reactietekst = null or :new.reactietekst = '' then
raise invalid_text;
end if;
if :new.naam != initcap(:new.naam) then
raise invalid_capitals;
end if;
if inserting then
:new.status := 'NIEUW';
end if;
EXCEPTION
WHEN invalid_capitals THEN
DBMS_OUTPUT.PUT_LINE('Alle woorden in de naam moeten met hoofdletter beginnen!');
WHEN invalid_ip THEN
DBMS_OUTPUT.PUT_LINE('Reacties mogen alleen vanaf een nederlands ip adress worden geplaats!');
WHEN invalid_text THEN
DBMS_OUTPUT.PUT_LINE('Reactie moet tekst bevatten!');
end;
/
答案 0 :(得分:6)
在Oracle中,NULL
和空字符串是相同的。在SQL中,您无法使用NULL
与=
进行比较。只是做:
if :new.reactietekst is null then
raise invalid_text;
end if;