Oracle SQL存储过程调用与执行

Dan*_*anK 15 sql oracle stored-procedures execute call

问题

我正在尝试理解Oracle SQL命令CALL与之间的区别EXECUTE.

我一直在用它CALL来启动存储过程,但在与另一个开发人员交谈时,我发现他几乎只使用了EXECUTE.我在网上做了一些研究,看看我是不是做错了什么但是我没有看到两个命令之间的明显区别,人们似乎可以互换使用它们.

根据文档,它们看起来非常相似(至少在与存储过程交互方面).

它看起来像是CALL一个通用的SQL命令,虽然EXECUTE似乎是专有的,所以我倾向于使用CALL,EXECUTE但后来我不知道这对性能有什么意义.

问题

  • 在开始存储过程方面,一个优于另一个吗?有关系吗?
  • 如果它确实重要,那么哪种情况适合?
  • 这两者之间是否有任何性能差异?什么是最佳做法?

DKr*_*oot 18

双方EXEC[ute] SP()CALL SP()可以在SQL*Plus可用于执行SP.顺便说一句,你也可以使用BEGIN SP(); END;

但是有一些不同之处.

  1. CALL是Oracle SQL,应该可以在任何地方使用 可以与Oracle通信的其他数据库客户端可能支持也可能不支持SQL*Plus EXEC.许多人(例如,Oracle SQL Developer,SQLWorkbench/J),但有些人没有(Liquibase).

  2. CALL语句传递的参数的数据类型必须是SQL数据类型.它们不能是PL/SQL专用数据类型,例如BOOLEAN.

  3. EXEC 可以用来执行SP,而不是任意语句.

  4. 如果SP没有参数,您可以使用EXEC SP;语法,但CALL需要空括号:CALL SP();