Oracle 11g PL/SQL Diana节点限制

Jon*_*Jon 0 oracle plsql oracle11g

我有一个如下所示的声明,但它一次填写1000个电话.任何结果都会引发PLS-123错误程序太大戴安娜节点

begin
sp_myprocedure(....)
sp_myprocedure(....)
sp_myprocedure(....)
sp_myprocedure(....)
end
Run Code Online (Sandbox Code Playgroud)

我们正在转向11g,我想知道这种限制是否可以增加到2000例如.

谢谢

APC*_*APC 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;
Run Code Online (Sandbox Code Playgroud)

因为您将参数存储在表中,所以您可以根据需要调用该proc,并且不受Diana节点限制的约束.

确实,您必须将参数值移动到表中,但维护表中的数据并不比维护源代码中的硬编码值更难.