首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PL/SQL中的函数和过程有什么区别?

PL/SQL中的函数和过程有什么区别?
EN

Stack Overflow用户
提问于 2009-04-21 10:18:42
回答 3查看 238K关注 0票数 75

PL/SQL中的函数和过程有什么区别?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-04-21 10:24:44

过程没有返回值,而函数有返回值。

示例:

代码语言:javascript
复制
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子句。这意味着它应该让函数体中的最后一条语句读取如下内容:

代码语言:javascript
复制
return(my_varchar2_local_variable);

其中my_varchar2_local_variable是应该由该函数返回的一些varchar2。

票数 54
EN

Stack Overflow用户

发布于 2009-04-21 10:32:19

函数可以内联到SQL语句中,例如

代码语言:javascript
复制
select foo
      ,fn_bar (foo)
  from foobar

这不能用存储过程来完成。查询优化器的体系结构限制了在此上下文中可以对函数执行的操作,要求它们是纯的(即,相同的输入总是产生相同的输出)。这限制了可以在函数中执行的操作,但如果它被定义为“纯”,则允许在查询中内联使用它。

否则,函数(不一定是确定性的)可以返回变量或结果集。在函数返回结果集的情况下,您可以根据查询中的其他选择来联接它。但是,您不能在相关子查询中使用这样的非确定性函数,因为优化器无法预测将返回哪种类型的结果集(这在计算上很难处理,就像停止问题一样)。

票数 19
EN

Stack Overflow用户

发布于 2017-08-31 20:55:31

简而言之,函数会返回一些东西。您可以在SQL查询中使用函数。Procedure是代码的一部分,用于处理数据,但不能从查询中调用procedure,必须在PL/SQL块中运行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/771949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档