4

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

  1. prepareCall("{call MY_FUN}");

  2. prepareCall"{BEGIN MY_FUN; END;}");

感谢您的回复。

问候约翰内斯

4

3 回答 3

5

这取决于。使用begin..end,您只需调用一个匿名 PL/SQL 程序块,该程序块又调用存储过程。当您使用 时call,您从 SQL 调用该过程。Call 还有一个额外的好处,就是可以返回值等等。有关详细信息,请参阅Oracle 数据库 SQL 语言参考:致电

也就是说,如果您只是调用这样的过程,则没有太大区别。我认为理论上begin..end会更有效,因为过程本身是 PL/SQL Call,并且作为 SQL,会导致 SQL 和 PL/SQL 之间的额外上下文切换,这会产生一些开销。但是我认为即使存在这种差异,您也不会注意到这种差异。

于 2013-10-07T07:43:04.813 回答
3

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

prepareCall("BEGIN MY_FUN('no-braces-with-begin-end-syntax'); MORE_FUN; A_LOT_MORE_FUN; END;");
于 2013-10-07T07:48:25.173 回答
-2

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

于 2013-10-07T11:29:10.143 回答