我试图在其中一个字段为空或使用以下代码为null时在插入或更新触发器之前抛出异常:
if :new.reactietekst = null or :new.reactietekst = '' then
raise invalid_text;
end if;
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用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);
Run Code Online (Sandbox Code Playgroud)
完整触发代码:
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;
/
Run Code Online (Sandbox Code Playgroud)
在Oracle中,NULL空字符串是相同的.在SQL中,您无法与NULL使用进行比较=.做就是了:
if :new.reactietekst is null then
raise invalid_text;
end if;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
177 次 |
| 最近记录: |