如何在函数调用中处理异常? 它有一个单独的函数,根据所使用的参数返回1或0。
如果函数is_valid_eventTypesGeographicAddress
抛出0,我想抛出异常。
我不知道如何使用这种语法。
select is_valid_eventTypesGeographicAddress (in_type) from dual ,
exception WHEN 0 then return ('Invalid geographic address type');
代码无法编译。
答案 0 :(得分:2)
您可以使用PL / SQL及其RAISE_APPLICATION_ERROR procedure引发异常。这是一个示例:
declare
myResult number;
begin
myResult := is_valid_eventTypesGeographicAddress (in_type);
if myResult = 0 then
raise_application_error(-20000, 'Invalid geographic address type');
end if;
end;
答案 1 :(得分:0)
PL / SQL构造是例外。您不能在纯SQL中实现异常处理。一种选择是编辑the function so it raises the exception-或编写一个包装函数来做到这一点。
create or replace function my_is_valid_eventTypesGeographicAddress (in_type in number)
return number
is
rv number;
begin
rv := is_valid_eventTypesGeographicAddress (in_type);
if rv = 0 then
raise_application_error (-20000, 'Invalid geographic address type');
end if;
return rv;
end;
然后调用此版本的函数:
select my_is_valid_eventTypesGeographicAddress (in_type) from dual;
这有点讨厌。通常,我们希望我们的SQL成功或失败。因此,您可能需要考虑使用原始功能,例如...
select * from dual
where is_valid_eventTypesGeographicAddress (in_type) <> 0
...,然后根据查询是否返回行来进行路由控制。
但是我想真正的问题是,为什么您要尝试在SQL中执行此操作?似乎它应该构成存储过程的一部分。