使用begin..end或调用来调用存储过程

时间:2013-10-07 07:36:21

标签: database oracle jdbc procedure

当我从JDBC调用Oracle数据库中的存储过程时,我有以下选择。建议使用哪一个以及为什么?

  1. prepareCall(“{call MY_FUN}”);

  2. prepareCall“{BEGIN MY_FUN; END;}”);

  3. 感谢您的回复。

    关心约翰内斯

3 个答案:

答案 0 :(得分:5)

这取决于。使用begin..end,您只需调用一个匿名PL / SQL程序块,该程序块又调用存储过程。使用call时,从SQL调用该过程。呼叫具有额外的好处,可以返回值等等。有关详细信息,请参阅Oracle Database SQL Language Reference: Call

那就是说,如果你只是打电话给这样的程序,那就没什么区别了。我认为理论上begin..end会稍微提高效率,因为过程本身就是PL / SQL而Call是SQL,会导致SQL和PL / SQL之间的额外上下文切换,这会产生一些开销。但是,如果它存在,我认为你不会注意到这种差异。

答案 1 :(得分:3)

如果您只想调用1个过程,则两个语句可能都相同。但是,使用匿名PLSQL块可以让您获得更多乐趣。例如,调用多个过程或使用PLSQL块中允许的任何语法。

prepareCall("BEGIN MY_FUN('no-braces-with-begin-end-syntax'); MORE_FUN; A_LOT_MORE_FUN; END;");

答案 2 :(得分:-2)

您可以根据您的要求使用任何类型的程序。请澄清您的要求。