[英]when should I go for procedure or function in PL/SQL?
我是PL / SQL的新手,尝试了一些实践示例。
关于PL / SQL PROCEDURE
和FUNCTION
我几乎没有问题:
我应该什么时候去参加PROCEDURE
或FUNCTION?
意味着,无论我使用FUNCTION
做什么任务都可以通过使用PROCEDURE
执行相同的任务。 那我为什么要去做这个功能呢? FUNCTION
优于PL / SQL中的PROCEDURE
是他们的任何优势吗?
FUNCTION
必须返回值。 这是使用功能的唯一优势还是功能还有其他优点?
我想澄清一下,您是否应该使用存储过程或函数的答案完全取决于您的业务需求和设计工作流程,前提是您明确了您的计划目标。 如果你不清楚你的目标,只是你的问题的方式,没有多少编码程序和功能将是有用的。
您必须注意,存储过程和函数在PL / SQL编程中用于不同的目的。 这些如下:
存储过程:
一个。 存储过程表示能够接受参数并对其进行处理的命名块(与匿名块相对)。
湾 存储过程定义了一个独立的过程工作流,您可以在其中执行一系列DML和/或其他操作。
C。 存储过程不必返回值。 因此,无法从SQL语句内部调用它们。 存储过程必须从名为或匿名的PL / SQL块执行。
d。 优点:
可以简单地从PL / SQL块中调用为独立语句。 例如,
myProcedure (x, y);
即 缺点:
SELECT
语句。 功能:
一个。 函数是命名块,能够接受参数并返回值。
湾 函数还定义了过程工作流,但在SQL语句中使用时,您无法执行任何DML或DDL。
C。 必须从SQL或PL / SQL语句中调用函数,其中函数返回的值被利用 - 即,分配给变量,作为参数传递等。
d。 优点:
SELECT
语句。 即 缺点:
如需进一步参考,请访问Oracle Docs 。
具有某些限制的用户定义函数可以在SELECT
语句和PL / SQL IF
语句中使用,而PROCEDURE
则不能。
您可以SELECT
从一个FUNCTION
即CAST
作为使用管道和表PIPE ROW
语句,但是这是一种先进的PL / SQL功能,您可以多备后用。
在线查阅Oracle开发人员文档,因为它是免费且非常好的: 开发和使用存储过程
A "value"
是许多内容之一,包括PL / SQL表,ref游标等。除此之外,可以在SQL语句中使用函数,而不能使用过程。 OUT
或IN OUT
参数从过程中返回多个值。 您可以在函数中使用DML(插入,更新,删除)语句。 但是,您无法在SQL查询中调用此类函数。 *例如:如果您有一个更新表的函数,则无法在任何SQL查询中调用该函数。
select myFunction(field) from sometable; --will throw error.
您可以选择使用程序还是功能取决于您的要求和舒适度。
主要优点:
每当你想要返回一些值并且必须进一步使用该值时,请选择函数。 如果要返回一些值作为最终结果,请转到过程。
使用过程比使用函数更有优势:
如果我们想使用execute immediate语句执行动态SQL语句,那么我们使用Procedure。它不能在Function内部完成。
过程可以独立执行,而Function必须是可执行语句的一部分,因为它不能独立执行。
函数必须返回一个值,它在我们使用的计算目的中使用。 函数它必须只返回一个值,但它接受许多返回类型。 函数我们可以使用select语句。 程序它可能会也可能不会返回一个值。 程序是我们可以使用dml操作。 我们只能执行的程序。
当然,您可以在函数中执行动态sql。 编写一个简单的函数来进行测试,你会发现它确实有效。
您可以在大多数时间使用功能或程序。 区别在于您是想在SQL语句中使用它们还是在IF语句中使用它们然后使用函数。 否则使用最适合您和调用应用程序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.