PL/SQL中的函数和过程有什么区别?
发布于 2009-04-21 10:24:44
过程没有返回值,而函数有返回值。
示例:
CREATE OR REPLACE PROCEDURE my_proc
(p_name IN VARCHAR2 := 'John') as begin ... end
CREATE OR REPLACE FUNCTION my_func
(p_name IN VARCHAR2 := 'John') return varchar2 as begin ... end
注意函数如何在参数列表和"as“关键字之间有一个return子句。这意味着它应该让函数体中的最后一条语句读取如下内容:
return(my_varchar2_local_variable);
其中my_varchar2_local_variable是应该由该函数返回的一些varchar2。
发布于 2009-04-21 10:32:19
函数可以内联到SQL语句中,例如
select foo
,fn_bar (foo)
from foobar
这不能用存储过程来完成。查询优化器的体系结构限制了在此上下文中可以对函数执行的操作,要求它们是纯的(即,相同的输入总是产生相同的输出)。这限制了可以在函数中执行的操作,但如果它被定义为“纯”,则允许在查询中内联使用它。
否则,函数(不一定是确定性的)可以返回变量或结果集。在函数返回结果集的情况下,您可以根据查询中的其他选择来联接它。但是,您不能在相关子查询中使用这样的非确定性函数,因为优化器无法预测将返回哪种类型的结果集(这在计算上很难处理,就像停止问题一样)。
发布于 2017-08-31 20:55:31
简而言之,函数会返回一些东西。您可以在SQL查询中使用函数。Procedure是代码的一部分,用于处理数据,但不能从查询中调用procedure,必须在PL/SQL块中运行。
https://stackoverflow.com/questions/771949
复制相似问题