【问题标题】:PL/Sql procedure vs function? [duplicate]PL/Sql 过程与函数? [复制]
【发布时间】:2011-11-08 12:08:52
【问题描述】:

我试图查看 pl/sql 过程和函数之间的区别,并找到了链接 http://it.toolbox.com/blogs/oracle-guide/learn-plsql-procedures-and-functions-13030。首先让我告诉你一个开发人员通常对 pl/sql 过程和函数做什么

1) 想要获得一些返回值。他可以通过函数和过程来实现它。如果他想返回单个值,他可以使用函数返回语句。如果他想返回多个值,他可以用inout参数来实现。同样他可以从procedure中用inout参数获取返回值(不是用return语句)

但是对于开发者来说,只要能够通过return语句或者inout参数实现其意图,这对开发者没有任何影响。

所以这里也可以互相替换。

2) 他可以在函数和过程中使用 DML。所以在这里他也可以使用其中任何一个来改变数据库的状态。

所以我没有得到任何具体的推理,因为两者可以在某些情况下相互替换。

在某种程度上我发现的唯一合理的原因是函数可以从 SQL 调用,过程不能

有人能解释一下何时以及为什么使用哪一个吗?

【问题讨论】:

标签: sql oracle plsql


【解决方案1】:

您已经发现了主要区别。如果你想在 SQL 中使用它,你可以创建一个函数。当您只想在 PL/SQL 中使用它时,您创建了一个过程。

【讨论】:

  • 所以我可以假设我应该始终使用过程,除非我想在 sql 查询中使用它们
  • 我认为这是一个很好的经验法则。我的措辞有点不同:如果您需要将零个或多个输入值转换为一个输出值,请使用函数。如果要操作数据库中的数据,请使用存储过程。
  • 如果我只想使用 PL/SQL,我也会使用函数。这样,如果我将来需要重用 SQL 中的逻辑,这完全是微不足道的。使用过程只有一个优点:它允许您返回多个参数。
【解决方案2】:

我做什么。如果没有副作用,则使用函数,否则使用过程。

此外,只有函数可以是“纯”(适用于函数索引)和“流水线”。

【讨论】:

    【解决方案3】:

    主要有两种不同:

    1:Use Procedure to take some action. But use function to return some value. 
    2:You can call function from sql query but Procedure can't. 
    3:Best practice to use Procedure then function if possible. 
    

    谢谢。

    【讨论】:

      【解决方案4】:

      过程和函数具有相同的结构,除了:

      函数标题必须包含一个 RETURN 子句,该子句指定返回值的数据类型。过程标题不能有 RETURN 子句。

      函数的可执行部分必须至少有一个 RETURN 语句。在过程中,RETURN 语句是可选的。有关详细信息,请参阅 RETURN 语句。

      更多信息请参考: http://docs.oracle.com/cd/B28359_01/appdev.111/b28370/subprograms.htm#CHDDCFHD

      【讨论】:

      • 是的,我认为这是最好的答案。此外,当您不想使用 OUT 和 IN OUT 模式参数时,您应该考虑使用函数。如果有任何理由使用这些参数你应该认真考虑使用存储过程。
      【解决方案5】:

      http://docs.oracle.com/cd/B28359_01/appdev.111/b28370/subprograms.htm#i4079

      PL/SQL 子程序概述 PL/SQL 子程序是一个命名的 PL/SQL 块,可以用一组参数调用。子程序可以是过程或函数。 通常,您使用过程来执行操作并使用函数来计算和返回值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-21
        • 1970-01-01
        • 2012-01-23
        • 2016-09-28
        • 2013-04-01
        相关资源
        最近更新 更多