如果我们在plsql过程中有out参数并在函数中返回。那么为啥我们使用过程而不是函数?
Posted
技术标签:
【中文标题】如果我们在plsql过程中有out参数并在函数中返回。那么为啥我们使用过程而不是函数?【英文标题】:If we have out parameter in plsql procedure and return in function.Then why we use procedure instead of function?如果我们在plsql过程中有out参数并在函数中返回。那么为什么我们使用过程而不是函数? 【发布时间】:2020-06-15 11:28:28 【问题描述】:如果我们的PLSQL过程中只有Out参数。那么我们可以使用函数而不是过程,因为函数也能够返回值。 如果我们仍然使用过程,那么我们使用 this 而不是函数。
我希望我能够传达我想问的正确问题?
【问题讨论】:
嗯,问题有点不清楚。存储过程不返回任何值,函数必须返回一些值。当然,您可以在函数和存储过程中使用 OUTPUT 参数。因此,基本上,您可以使用存储过程而不是函数,例如一个 OUTPUT 参数,但是更难理解存储过程的作用,并且一个函数的多功能性违反了面向对象的编程。更重要的是,您不能使用存储过程在 SQL 查询中返回某些内容。如果您能就您的问题提供更详细的信息,我们可以为您提供更好的帮助。 感谢 Bartosz 的回复。我只是想知道,因为我使用的是带有 out 参数的非常基本的过程,所以我可以使用函数而不是使用过程,因为我只是得到输出。 【参考方案1】:两者之间的一些重要区别如下:
功能:
可以从SQL语句中调用(SELECT
、UPDATE
、DELETE
)
只能返回一个值
DML
里面不允许操作
最适合为一些常见的复杂逻辑选择值。
程序:
不能从 SQL 语句中调用。您必须需要 PL/SQL 块才能调用它。 可以返回多个值 (OUT parameters
)
过程中允许所有DML
操作。
最适合做一些复杂的逻辑并相应地更新表数据。
【讨论】:
【参考方案2】:这取决于程序的作用。
例如,如果它(连同返回一些值)使用 DML 操作(例如,将行插入到某个表中),那么函数不能这样做 - 您必须使用过程。
Procedure 的缺点是不能在SELECT
语句中使用,比如
select proc_name(out_param) from dual;
在这种情况下,您必须使用函数。
另外,OUT
参数必须存储在某个地方,这通常是一个本地声明的变量,但这意味着您需要另一个 PL/SQL 块来调用该过程并查看其结果。
如果您当前的程序所做的一切都是查找并返回某个值,那么是的 - 函数可能是更好的选择。
【讨论】:
以上是关于如果我们在plsql过程中有out参数并在函数中返回。那么为啥我们使用过程而不是函数?的主要内容,如果未能解决你的问题,请参考以下文章