我有一个如下所示的声明,但它一次填写1000个电话。任何事情都会引发PLS-123错误程序太大戴安娜节点
begin
sp_myprocedure(....)
sp_myprocedure(....)
sp_myprocedure(....)
sp_myprocedure(....)
end
我们正在转向11g,我想知道这种限制是否可以增加到2000例如。
由于
答案 0 :(得分:5)
“我有一个如下所示的声明,但它填写了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;
因为您将参数存储在表中,所以您可以根据需要调用该proc,并且不受Diana节点限制的约束。
确实,您必须将参数值移动到表中,但维护表中的数据并不比维护源代码中的硬编码值更难。
答案 1 :(得分:1)
如果你只是从10克移动那么我不相信限制已经改变。所以,如果你现在遇到问题,那么你将在11g再次使用它们。看看this问问汤姆的文章。一般建议是将您的程序放在一个包中。或者,将其分解为更小的块。如果你只是在运行调用过程1000次的块时遇到错误,并且在程序中自己那么我建议你尝试APC说并循环通过它,因为这应该减少节点数。