问题
我试图了解 Oracle SQL 命令 CALL
和 EXECUTE
之间的区别。
我一直使用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/