我何时应该在PL / SQL中使用程序或功能?

时间:2012-03-24 03:32:57

标签: sql oracle plsql

我是PL / SQL的新手,尝试了一些练习示例。
我对PL / SQL PROCEDURE& FUNCTION

我应该何时去PROCEDUREFUNCTION?

意味着,无论我使用FUNCTION执行的任务是什么,使用PROCEDURE都可以执行相同的任务。 那我为什么要去做这个功能呢? PL / SQL中FUNCTION优于PROCEDURE的任何优势?

FUNCTION必须返回值。这是使用函数的唯一优势还是函数还有其他优点?

8 个答案:

答案 0 :(得分:7)

我想澄清一下,您是否应该使用存储过程或功能的答案完全取决于您的业务需求和设计工作流程,前提是您明确了您的计划目标。如果你不清楚你的目标,只是你的问题的方式,没有多少编码程序和功能将是有用的。

您必须注意,存储过程和函数在PL / SQL编程中用于不同的目的。具体如下:

  1. 存储过程:

    一个。存储过程表示能够接受参数并对其进行处理的命名块(与匿名块相对)。

    湾存储过程定义了一个独立的过程工作流程,您可以在其中执行一系列DML和/或其他操作。

    ℃。存储过程不必返回值。因此,无法从SQL语句内部调用它们。存储过程必须从名为或匿名的PL / SQL块执行。

    d。优点:

    • 程序不必返回值(这也可能是一个缺点)。
    • 可用于执行一系列DML或DDL(是的,这可以通过动态SQL实现,但有一些限制)操作。
    • 可以简单地从PL / SQL块中调用为独立语句。如,

      myProcedure (x, y);
      

    即缺点:

    • 无法从SQL查询中调用 - DML或SELECT语句。
    • 不能在索引中使用。
  2. 功能:

    一个。函数是命名块,能够接受参数并返回值。

    湾函数还定义了过程工作流,但在SQL语句中使用时,不能执行任何DML或DDL。

    ℃。必须从SQL或PL / SQL语句中调用函数,其中函数返回的值被利用 - 即,分配给变量,作为参数传递等。

    d。优点:

    • 可用于SQL查询 - DML或SELECT语句。
    • 如果函数是确定性的,则可以在基于函数的索引中使用(意味着对于一组确定的输入,函数在每次调用时返回相同的输出)。

    即缺点:

    • 如果从SQL查询调用的函数包含任何DML,则查询失败。
    • 函数必须返回一个值。因此,函数调用不能像过程调用那样是一个独立的语句。
  3. 如需进一步参考,请访问Oracle Docs

答案 1 :(得分:5)

具有某些限制的用户定义函数可用于SELECT语句和PL / SQL IF语句,而PROCEDURE则不能。

您可以SELECT使用FUNCTION CAST作为使用管道和PIPE ROW语句的表,但这是一个高级的PL / SQL功能,您可以使用很多后面。

在线查阅Oracle开发人员文档,因为它是免费且非常好的:Developing and Using Stored Procedures

答案 2 :(得分:2)

  1. 一个函数将返回一个值,A "value"是众多事物中的一个,包括PL / SQL表,ref游标等。除此之外,可以在SQL语句中使用函数,而程序不能使用。
  2. 程序用于执行业务逻辑,我们可以使用OUTIN OUT参数从过程中返回多个值。
  3. 我个人使用函数进行计算 - 例如:检查特定条件,例如根据条件检索值,检查条件是真还是假。
  4. 您可以在函数中使用DML(插入,更新,删除)语句。但是,您无法在SQL查询中调用此类函数。 *例如:如果您有一个更新表的函数,则无法在任何SQL查询中调用该函数。

    select myFunction(field) from sometable; --will throw error.
    
  5. 您可以选择使用程序还是功能取决于您的要求和舒适度。

答案 3 :(得分:0)

主要优势:

  1. 函数必须返回一个值,其中过程可能会或可能不会返回值。
  2. 主要用于计算值的函数。其中程序主要用于执行业务逻辑。
  3. 用于检索值的函数,其中作为处理值的过程。
  4. 函数它必须只返回一个值,但它接受许多返回类型。

答案 4 :(得分:0)

每当您想要返回某个值并且必须进一步使用该值时,请转到函数。如果要返回一些值作为最终结果,请转到过程。

答案 5 :(得分:-1)

使用程序比使用函数更有优势:

  1. 如果我们想使用execute immediate语句执行动态SQL语句,那么我们使用Procedure。它不能在函数内部完成。

  2. 过程可以独立执行,而Function必须是可执行语句的一部分,因为它不能独立执行。

答案 6 :(得分:-1)

函数必须返回它在我们使用的计算目的中使用的值。 函数它必须只返回一个值,但它接受许多返回类型。 函数我们可以使用select语句。 程序它可能会也可能不会返回一个值。 程序是我们可以使用dml操作。 我们只能执行的程序。

答案 7 :(得分:-3)

当然,您可以在函数中执行动态sql。编写一个简单的函数来进行测试,你会发现它确实有效。

您可以在大多数时间使用功能或程序。区别在于您是想在SQL语句中使用它们还是在IF语句中使用它们然后使用函数。否则请使用最适合您和调用应用程序。