sql - Oracle SQL 存储过程调用与执行

标签 sql oracle stored-procedures call execute

问题

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

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

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

看起来CALL确实是一个通用的SQL命令,而EXECUTE似乎是专有的,所以我倾向于使用CALL而不是EXECUTE 但话又说回来,我不知道这对性能意味着什么。

问题

  • 在启动存储过程方面,其中一个比另一个更好吗?这重要吗?
  • 如果确实重要,什么情况下两者都合适?
  • 两者之间有性能差异吗?最佳实践是什么?

最佳答案

两者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();

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

相关文章:

oracle - 如何将文件复制到虚拟盒oracle盒中

sql-server-2008 - 列出所有带有模式名称的存储过程

SQL Server 存储过程并在 VB.NET 中执行

sql - 在限定时间内获得 COUNT() 结果

java - 为什么 Sun/Oracle 在 Java 7/JDK7 中选择 Unicode 5.1 而不是 Unicode 5.2?

sql - 在存储过程中访问另一个数据库中的数据

entity-framework - 我看不到带有 POCO 类的 DbContext 中的存储过程

mysql - 如何在多个表中选择唯一的折扣

mysql - 以元音开头和结尾的 SQL 字符串 - 寻找快捷方式

java - 由 : java. sql.SQLSyntaxErrorException 引起:ORA-01722:JPA HIBERNATE HQL 中的数字无效