PL/SQL存储过程和函数有什么区别?

21

我试图了解pl/sql过程和函数之间的区别,发现了这个链接http://it.toolbox.com/blogs/oracle-guide/learn-plsql-procedures-and-functions-13030。首先让我告诉你开发人员通常如何使用pl/sql过程和函数:

1)想要获取一些返回值。他可以在函数和过程中都实现。使用函数如果他想要返回一个单值,他可以使用return语句。如果他想要返回多个值,则可以使用inout参数来实现。类似地,他也可以从过程中使用inout参数获取返回值(而不是使用return语句)。

但对于开发人员来说,只要能够通过return语句或inout参数实现其意图,就没有任何区别。

所以在这里两者都可以互换使用。

2)他可以在函数和过程中都使用DML。因此,在这里,他可以使用其中任何一个来更改数据库的状态。

所以我没有得到任何明确的理由,应该在哪里使用哪个,因为在某些情况下两者都可以互换。

我找到的唯一合理的理由是,函数可以从SQL中调用,而过程不能。

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


请参阅Oracle.com上的函数与存储过程 - dee-see
@Mohit - 我相信类似的问题之前已经被问过了。可能是重复的 https://dev59.com/YHM_5IYBdhLWcg3w43lt - Jon Raynor
@Vache 我发现了这个语句:存储过程和函数之间还有一个区别,即存储过程只编译一次,可以反复调用而无需每次重新编译,这提高了性能并节省了时间。另一方面,函数在每次调用时都会被编译。不确定这是否真实可信?来源于 https://forums.oracle.com/forums/thread.jspa?messageID=547397 - M Sach
我认为在过去25年中,每个月都会有人问起这个问题,显然他们对计算机和数学都很陌生。 - William Robertson
以下是有关编程的内容,需要从英语翻译成中文。请仅返回翻译后的文本:https://dev59.com/HHRA5IYBdhLWcg3w8iol#51917404 - Mateen
5个回答

14

您已经找到主要区别。当您想在SQL中使用函数时,可以创建函数;而当您只想在PL/SQL中使用时,可以创建存储过程。


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

4
我所做的事情是:如果没有副作用,则使用函数,否则使用过程。此外,只有函数可以是“纯的”(适合函数索引)和“管道化的”。

1

有两个主要的不同点:

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. 

感谢。

0

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

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

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

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


是的,我认为这是最好的答案。此外,当您不想使用OUT和IN OUT模式参数时,应考虑使用函数。如果有任何理由使用这些参数,您应认真考虑使用存储过程。 - user6611026

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接