如果我们在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语句中调用(SELECTUPDATEDELETE) 只能返回一个值 DML 里面不允许操作 最适合为一些常见的复杂逻辑选择值。

程序:

不能从 SQL 语句中调用。您必须需要 PL/SQL 块才能调用它。 可以返回多个值 (OUT parameters) 过程中允许所有DML 操作。 最适合做一些复杂的逻辑并相应地更新表数据。

【讨论】:

【参考方案2】:

这取决于程序的作用。

例如,如果它(连同返回一些值)使用 DML 操作(例如,将行插入到某个表中),那么函数不能这样做 - 您必须使用过程。

Procedure 的缺点是不能在SELECT 语句中使用,比如

select proc_name(out_param) from dual;

在这种情况下,您必须使用函数。

另外,OUT 参数必须存储在某个地方,这通常是一个本地声明的变量,但这意味着您需要另一个 PL/SQL 块来调用该过程并查看其结果。

如果您当前的程序所做的一切都是查找并返回某个值,那么是的 - 函数可能是更好的选择。

【讨论】:

以上是关于如果我们在plsql过程中有out参数并在函数中返回。那么为啥我们使用过程而不是函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PLSQL 过程中将绑定变量作为 IN OUT 参数传递

使用 out 参数调用 plsql 过程 = null

如何探索 PLSQL 块中的 out 游标参数?

用JAVA调用Mysql数据库,数据存储过程的封装与调用;

在PLSQL中,存储过程的输出参数最大支持多大

如何在plsql块中执行删除语句并在过程中调用它