【发布时间】:2020-04-25 02:46:54
【问题描述】:
我想达到什么目的?
- 我想使用 PL/SQL 将 Oracle 过程从一个用户复制到另一个用户。
- 我想复制所有过程 - 包括那些有编译错误的过程。
我卡在哪里了?
- 在 EXECUTE IMMEDIATE 创建带有编译错误的过程后,PL/SQL 块不再执行。
- 也不例外!
以下两段代码演示了该问题。第一个块按预期执行。第二个块没有全部执行。有编译错误的过程 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;
【问题讨论】:
-
我很好奇你为什么要这样复制程序?如果过程几乎相同,你不能概括一个并传递额外的参数吗?
-
我得到一个有效的错误返回 - ORA-24344: 编译错误成功 ORA-06512: at line 3 24344. 00000 - "success with compilation error" *原因:发生 sql/plsql 编译错误. *操作:返回 OCI_SUCCESS_WITH_INFO 以及错误代码
-
是否有任何原因,您没有包含您的 plsql 对象的应用程序架构,您希望能够通过 exec privs 执行它们?
-
这似乎是管理模式的一种非常糟糕的方式。基本原理是什么?
-
@OldProgrammer 程序差别很大。上面的代码只是为了演示问题。
标签: oracle stored-procedures dynamic-sql