Pet*_*ros 49
过程没有返回值,而函数有.
例:
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
Run Code Online (Sandbox Code Playgroud)
注意函数如何在参数列表和"as"关键字之间有一个return子句.这意味着它应该在函数体内的最后一个语句读取如下内容:
return(my_varchar2_local_variable);
Run Code Online (Sandbox Code Playgroud)
其中my_varchar2_local_variable是应该由该函数返回的一些varchar2.
Con*_*lls 16
函数可以内联到SQL语句中,例如
select foo
,fn_bar (foo)
from foobar
Run Code Online (Sandbox Code Playgroud)
使用存储过程无法做到这一点.查询优化器的体系结构限制了在此上下文中可以对函数执行的操作,要求它们是纯的(即,相同的输入始终生成相同的输出).这限制了函数中可以执行的操作,但如果将其定义为"纯",则允许在查询中将其用于内联.
否则,函数(不一定是确定性的)可以返回变量或结果集.在函数返回结果集的情况下,您可以将其与查询中的某些其他选择连接.但是,您不能在相关子查询中使用这样的非确定性函数,因为优化器无法预测将返回哪种结果集(这在计算上是难以处理的,如停止问题).
| 归档时间: |
|
| 查看次数: |
235267 次 |
| 最近记录: |