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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (44)

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

提问于
用户回答回答于

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

例子:

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(my_varchar2_local_variable);
用户回答回答于

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

select foo
      ,fn_bar (foo)
  from foobar

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

否则,函数可以返回变量或结果集。对于返回结果集的函数,您可以将其与查询中的其他选定内容连接起来。

扫码关注云+社区