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

Joh*_*ard 4 database oracle procedure jdbc

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

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

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

感谢您的回复.

关心约翰内斯

Gol*_*rol 5

这取决于.使用begin..end,您只需调用匿名PL/SQL程序块,然后调用存储过程.使用时call,从SQL调用该过程.呼叫具有额外的好处,可以返回值等等.请参阅Oracle数据库SQL语言参考:请致电以获取更多信息.

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