如何在函数中引发异常

时间:2019-12-13 10:08:29

标签: sql oracle exception plsql

如何在函数调用中处理异常? 它有一个单独的函数,根据所使用的参数返回1或0。

如果函数is_valid_eventTypesGeographicAddress抛出0,我想抛出异常。

我不知道如何使用这种语法。

select is_valid_eventTypesGeographicAddress (in_type) from dual ,
             exception WHEN 0 then return  ('Invalid geographic address type');

代码无法编译。

2 个答案:

答案 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中执行此操作?似乎它应该构成存储过程的一部分。