暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 识别何时在SQL查询或PL/SQL过程中执行函数

ASKTOM 2019-02-07
311

问题描述

有什么方法可以识别pl/sql函数何时在SQL查询中执行以及何时在过程或PL/SQL匿名块中执行?(我不想传递任何参数以进行手动识别)

我需要的主要原因是当一个函数在SQL查询中执行时,我不想在失败的情况下引发异常,我只会对返回值NULL感到满意。但是在pl/sql脚本中执行相同的功能时,我想引发异常。

提前谢谢你。

专家解答

你的意思是从一个函数内检测它是由SQL还是PL/SQL调用的?

我认为没有可靠的方法可用。如果你有一个复杂的调用堆栈,有多个级别的PL/SQL和SQL,你会遇到复杂的情况。

但是有一个黑客可用。

当您在SQL中调用PL/SQL时,未传播异常NO_DATA_FOUND。所以你可以用这个来 “返回null”,而不是从SQL调用它时得到一个异常:

create or replace function f 
  return int as
begin

  raise no_data_found;
  
  return 1;
  
end f;
/

select f from dual;

F        
   

declare
  v integer;
begin
  v := f;
end;
/

Error report -
ORA-01403: no data found

文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论