我想达到什么目的?
我在哪里卡住?
以下两段代码演示了该问题。第一块按预期执行。第二个块未完全执行。过程p3出现编译错误不是问题。我的问题是未创建过程p4。
-- creates procedure p1 and p2
BEGIN
EXECUTE IMMEDIATE 'create or replace procedure p1 is begin null; end;';
EXECUTE IMMEDIATE 'create or replace procedure p2 is begin null; end;';
dbms_output.put_line('Done!');
END;
-- creates only procedure p3 and exits with no error
BEGIN
EXECUTE IMMEDIATE 'create or replace procedure p3 is begin null end;'; -- compilation error (missing semicolon)
EXECUTE IMMEDIATE 'create or replace procedure p4 is begin null; end;';
dbms_output.put_line('Done!');
END;
是,正在引发一个例外。您会看到“编译错误成功” IS异常。您可以通过定义异常变量并使用EXCEPTION_INIT
:]对其进行初始化来捕获它
eCompilation_error EXCEPTION;
PRAGMA EXCEPTION_INIT(eCompilation_error, -24344);
要详细了解Bob的答案:如果您想忽略编译异常,则需要将每个execute immediate
包装在一个匿名块中。