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的主要区别,
- 过程被命名为执行一个或多个任务的PL / SQL块。 其中函数被命名为执行特定操作的PL / SQL块。
- 过程可能会或可能不会返回值作为函数应返回一个值。
- 我们可以在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块中运行它。
- 我们可以调用一个存储过程里面存储的Procedure,Function内的函数,StoredProcedure内的函数但是我们不能调用存储过程中的函数。
- 我们可以在select语句中调用函数。
- 我们可以从函数返回值,而不用把参数作为parameter passing给存储过程。
这是我发现的区别。 请让我知道,如果有的话。