问题描述
有什么方法可以识别pl/sql函数何时在SQL查询中执行以及何时在过程或PL/SQL匿名块中执行?(我不想传递任何参数以进行手动识别)
我需要的主要原因是当一个函数在SQL查询中执行时,我不想在失败的情况下引发异常,我只会对返回值NULL感到满意。但是在pl/sql脚本中执行相同的功能时,我想引发异常。
提前谢谢你。
我需要的主要原因是当一个函数在SQL查询中执行时,我不想在失败的情况下引发异常,我只会对返回值NULL感到满意。但是在pl/sql脚本中执行相同的功能时,我想引发异常。
提前谢谢你。
专家解答
你的意思是从一个函数内检测它是由SQL还是PL/SQL调用的?
我认为没有可靠的方法可用。如果你有一个复杂的调用堆栈,有多个级别的PL/SQL和SQL,你会遇到复杂的情况。
但是有一个黑客可用。
当您在SQL中调用PL/SQL时,未传播异常NO_DATA_FOUND。所以你可以用这个来 “返回null”,而不是从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; Fdeclare v integer; begin v := f; end; / Error report - ORA-01403: no data found
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




