的Oracle 11g PL / SQL戴安娜节点限制

我有一个声明,如以下,但其填充出来做一次1000的电话。 任何超过抛出一个PLS-123错误程序太大戴安娜节点

begin sp_myprocedure(....) sp_myprocedure(....) sp_myprocedure(....) sp_myprocedure(....) end

我们正在向11g和我在想,如果这个限制可以增加至2000年的例子。

谢谢

--------------解决方案-------------

“我有一个声明,如以下,但其填充出来做一次电话1000”

这是一个非常不好的编程策略。 写同样的事情多次是一个代码味道。 任何时候,我们发现自己与cut'n'paste编程,然后有点编辑的是时候,我们应该停下来问自己,'嗯有没有更好的方式来做到这一点?“

“参数是每个存储过程调用不同的”

是的,但参数必须来自某处。 想必此刻的你是硬编码他们一千倍。 呸。

一个更好的解决办法是将它们存储在表中。 然后,你可以写一个简单的循环。 喜欢这个:

for prec in ( select p1, p2 from my_parameters
order by id -- if ordering is important
)
loop
sp_myprocedure(prec.p1, prec.p2);
end loop;

因为你是存储在表中的参数,只要你喜欢,你可以尽可能多地调用该进程内,你没有被戴安娜节点限制的约束。

真正的你将有你的参数值转移到一个表,但它不是更难维护表中的数据比它是保持在源代码中的硬编码值。

如果你只是从10G移动话,我不相信限制已经改变。 所以,如果你现在有问题,那么你会再次在11g中有他们。 看看this向汤姆文章的。 一般的建议是把你的程序包中。 或者,把它分解成更小的块。 如果您运行的调用程序1000倍块和自身的过程时,会只得到了错误,那么我建议你试试作为APC说,并遍历它,而不是因为这应该减少节点的数量。

分类:神谕 时间:2015-03-15 人气:2
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.239 (s). 10 q(s)