问题

我试图了解Oracle SQL命令CALLEXECUTE之间的区别。

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

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


http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_4008.htm
http://docs.oracle.com/cd/B19306_01/server.102/b14357/ch12022.htm
http://docs.oracle.com/cd/B28359_01/olap.111/b28126/dml_app_dbms_aw026.htm


它看起来确实像CALL是通用SQL命令,而EXECUTE似乎是专有的,所以我倾向于在CALL上使用EXECUTE,但是我仍然不知道这对性能意味着什么。

问题


就启动存储过程而言,一个比另一个更可取吗?有关系吗?
如果有关系,哪种情况合适?
两者之间是否有任何性能差异?最佳做法是什么?

最佳答案

EXEC[ute] SP()CALL SP()都可以在SQL * Plus中用于执行SP。顺便说一句,您也可以使用BEGIN SP(); END;

但是有一些区别。


CALL是Oracle SQL,应可在任何地方使用。可以与Oracle通信的其他数据库客户端可能支持SQL * Plus EXEC,也可能不支持。有许多功能(例如,Oracle SQL Developer,SQLWorkbench / J),有的则没有(Liquibase)。
CALL语句传递的参数的数据类型必须是SQL数据类型。它们不能是仅PL / SQL的数据类型,例如BOOLEAN。
EXEC不仅可以用于执行SP,还可以用于执行任意语句。
如果SP没有参数,则可以使用EXEC SP;语法,但是CALL需要空括号:CALL SP();

关于sql - Oracle SQL存储过程调用与执行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20571647/

10-12 03:00
查看更多