我的脚本有第一个无效过程和第二个有效过程.我希望该脚本至少为第二个有效对象执行



我有下面的PLSQL脚本,其中PROC1由于某种原因无效(我们没有讨论原因(,但PROC2有效。

问题:我希望脚本运行时至少PROC2没有任何问题?我希望执行有效的PROC2,而不考虑无效的PROC 1。

BEGIN
PROC1; --This is due to x reason is invalid
PROC2;--This is valid.
END;

您不能在PL/SQL块中执行任何INVALID对象。

您甚至无法在PL/SQL块中捕捉到这样的异常。Oracle检查pl/sql块中使用的所有对象的状态,如果是INVALID,则抛出错误。

处理此问题的最佳方法是更改proc1,重新编译它,使其成为VALID。就是这样。

但是,一种方法是使用execute immediate如下:

declare
lv_status user_objects.status%type;
begin
select status into lv_status from user_objects where object_name = 'PROC1';
if lv_status = 'VALID' THEN
execute immediate 'call PROC1()';
END IF;
proc2;
end;
/

数据库<>小提琴演示

干杯!!

最新更新