【发布时间】:2012-09-06 17:07:52
【问题描述】:
我有一个包装程序(proc_main),它在其中调用一些程序。
create or replace Procedure proc_main
as
begin
proc_child1;
proc_child2;
proc_child3;
proc_compile_invalids; -- This invokes "alter procedure <procedure_name> compile" statement for all the invalids.
end;
/
proc_child 过程应用一些处理逻辑,其中涉及一些步骤来重命名其中的表。
这会使程序无效,这就是我让 proc_compile_invalids 程序再次将它们设置为有效状态的原因。
我的问题是:当我执行 proc_main 过程时,它使主过程以及内部子过程无效。 因此,当最后一步调用 proc_compile_invalids 时,它会挂起,因为它试图重新编译主调用过程。
显然,如果我删除最后一步并单独执行它,这不是问题。
我知道我可以通过注释编译过程并将其作为独立的执行来将它们分离为 2 个不同的调用。 而且我也知道这是一个装饰步骤,因为 oracle 会在下次执行之前尝试编译一个过程。所以,不管怎样,无效者变得有效。 但是,当天执行结束时,他们都处于无效状态,我被权力质疑是否可以避免!
所以,我只是想知道我是否可以避免分离调用并仍然将其保留为主过程的最后一步。
非常感谢任何想法/指针。
【问题讨论】:
-
最好一开始就避免重命名表。