繁体   English   中英

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

[英]when should I go for procedure or function in PL/SQL?

我是PL / SQL的新手,尝试了一些实践示例。
关于PL / SQL PROCEDUREFUNCTION我几乎没有问题:

我应该什么时候去参加PROCEDUREFUNCTION?

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

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

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

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

  1. 存储过程:

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

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

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

    d。 优点:

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

       myProcedure (x, y); 

    缺点:

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

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

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

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

    d。 优点:

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

    缺点:

    • 如果从SQL查询调用的函数包含任何DML,则查询将失败。
    • 函数必须返回一个值。 因此,函数调用不能像过程调用那样是一个独立的语句。

如需进一步参考,请访问Oracle Docs

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

您可以SELECT从一个FUNCTIONCAST作为使用管道和表PIPE ROW语句,但是这是一种先进的PL / SQL功能,您可以多备后用。

在线查阅Oracle开发人员文档,因为它是免费且非常好的: 开发和使用存储过程

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

     select myFunction(field) from sometable; --will throw error. 

您可以选择使用程序还是功能取决于您的要求和舒适度。

主要优点:

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM