当我从JDBC调用Oracle数据库中的存储过程时,我有以下选择。建议使用哪一个以及为什么?
prepareCall(“{call MY_FUN}”);
prepareCall“{BEGIN MY_FUN; END;}”);
感谢您的回复。
关心约翰内斯
答案 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)
您可以根据您的要求使用任何类型的程序。请澄清您的要求。