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

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); 

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

一个函数可以被插入到一个SQL语句中,例如

 select foo ,fn_bar (foo) from foobar 

存储过程无法完成。 查询优化器的体系结构限制了在这种情况下可以完成的function,要求它们是纯粹的(即相同的input始终产生相同的输出)。 这限制了在函数中可以做什么,但是如果它被定义为“纯”的,则允许它在查询中被内联使用。

否则,函数(不一定是确定性的)可以返回一个variables或结果集。 在函数返回一个结果集的情况下,你可以join它在查询中的其他select。 但是,在相关的子查询中不能使用像这样的非确定性函数,因为优化器无法预测将返回哪种结果集(这在计算上难以处理,就像暂停问题一样)。

存储过程和函数都被命名为bloack,驻留在数据库中,可以在需要时执行。

主要区别是:

1.存储过程可以使用out参数来select性地返回值,但是也可以在不返回值的情况下写入。但是函数必须返回一个值

2.存储过程不能在select语句中使用,因为函数可以在select语句中使用。

实际上,我会为一个特定的需求组和一个特定的需求存储一个函数,以满足一个共同的需求,可以在多个场景中共享g:比较两个string,或者修剪它们或者最后一部分,如果我们有function,我们可以全球使用它的任何应用程序,我们有

以下是程序和function的主要区别,

  1. 过程被命名为执行一个或多个任务的PL / SQL块。 其中函数被命名为执行特定操作的PL / SQL块。
  2. 过程可能会或可能不会返回值作为函数应返回一个值。
  3. 我们可以在select语句中调用函数,我们不能这样做。

以简单的方式,它使这个含义。

function :

这些子程序返回一个 ; 主要用来计算和返回一个值。

程序:

这些子程序直接返回值 ; 主要用来执行一个动作。

示例程序:

 CREATE OR REPLACE PROCEDURE greetings BEGIN dbms_output.put_line('Hello World!'); END ; / 

执行独立程序:

可以通过两种方式调用独立程序:

•使用EXECUTE关键字•从PL / SQL块中调用过程的名称

该过程也可以从另一个PL / SQL块中调用:

 BEGIN greetings; END; / 

function:

 CREATE OR REPLACE FUNCTION totalEmployees RETURN number IS total number(3) := 0; BEGIN SELECT count(*) into total FROM employees; RETURN total; END; / 

以下程序从另一个块调用函数totalCustomers

 DECLARE c number(3); BEGIN c := totalEmployees(); dbms_output.put_line('Total no. of Employees: ' || c); END; / 

用几句话 – 函数返回一些东西。 你可以在SQL查询中使用函数。 过程是对数据做某些事情的代码的一部分,但是你不能从查询中调用过程,你必须在PL / SQL块中运行它。

  1. 我们可以调用一个存储过程里面存储的Procedure,Function内的函数,StoredProcedure内的函数但是我们不能调用存储过程中的函数。
  2. 我们可以在select语句中调用函数。
  3. 我们可以从函数返回值,而不用把参数作为parameter passing给存储过程。

这是我发现的区别。 请让我知道,如果有的话。