我有下面的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;
/
数据库<>小提琴演示
干杯!!