【问题标题】:calling multiple Oracle stored procedures from Java从 Java 调用多个 Oracle 存储过程
【发布时间】:2017-09-20 23:25:53
【问题描述】:

我的数据库示例中有多个存储过程:proc1、proc2、...proc10。

我想从 java 中循环调用它们。避免多次网络旅行、重复编译、性能的最佳方法是什么?

这就是我现在拥有的:

for (int i = 1; i <= 10; i++) 
{
  CallableStatement stmt = conn.prepareCall("call proc"+i);
  stmt.execute()
}

我不想执行调用这 10 个过程的单个顶级过程,因为我想从我的代码中更多地控制这些执行。例如,我可能会在执行 5 个过程后收到中断,并且可能需要进行上下文切换。在服务器端执行顶级程序时无法执行此操作

【问题讨论】:

  • 是什么让您寻找与现有解决方案不同的解决方案?对于您给定的约束,它看起来大多是合理的。但是,如果这些调用经常发生,您可能希望将 CallableStatements 保留在一个数组中。

标签: java oracle stored-procedures


【解决方案1】:

一种方法是编写另一个存储过程,依次调用proc1proc10。调用“uber-procedure”应该是单次往返。

参考:


我 [...] 不得不排除该选项,因为我想从我的代码中更多地控制这些执行。

如果您需要通过代码进行控制,那么您目前正在做的事情几乎没有其他选择。代码中的控制意味着您的代码必须在对存储过程的每次调用之间执行。这反过来又意味着(至少)每次通话之间有一次往返。

(我想,您可以编写,或者为您的每个场景生成不同的超级程序。但这与我的建议基本相同。)

【讨论】:

  • 谢谢。我考虑了一下,但不得不排除该选项,因为我想从我的代码中更多地控制这些执行。例如,我可能会在执行 5 个过程后收到中断,并且可能需要进行上下文切换。当我在服务器端执行顶级过程时,我不能这样做。
  • 再次感谢。最后一个问题,无论如何,批处理是否有助于我想要实现的目标?我可以控制在两者之间停下来吗?
  • 不,你不会。阅读 executeBatch 的 javadoc。
猜你喜欢
  • 2012-01-27
  • 1970-01-01
  • 1970-01-01
  • 2020-11-15
  • 1970-01-01
  • 2013-12-04
  • 2011-05-08
  • 1970-01-01
  • 2011-04-25
相关资源
最近更新 更多