【Oracle】存储过程(Procedure)与(自定义)函数(Function)的区别

存储过程Procedure

(自定义)函数Function

存储过程需要单独执行,不一定有返回值;

函数可以随处调用,一定有返回值,不一定是变量,也可以是表。

用于在数据库中完成特定的操作或任务

用于特定的数据

程序头部声明时不需描述返回类型

程序头部声明时必须返回类型

可以作为一个独立的语句执行

不能独立执行,必须作为表达式的一部分调用

可以通过out/in out返回零个或多个值

通过return语句返回一个值

SQL语句中不能调用

SQL语句中可以调用

 

 

存储过程和函数执行的本质一样

    当存储过程和函数被执行的时候,SQL Manager会到procedure cache中去取相应的查询语句,如果在procedure cache里没有相应的查询语句,SQL Manager就会对存储过程和函数进行编译。 

例子:

 

//创建过程

create or replace procedure add_emailinfo (e_name email_info.fullname%type , e_address email_info.email_address%type)

is

begin

insert into email_info (fullname , email_address) values (e_name , e_address);

end ;

//调用过程

call add_emailinfo ('test_name' , 'test_address');

// ------------------------------------------------------------------------------------------------ // 

//创建函数

create or replace function sel_emailinfo (s_name email_info.fullname%type)

return varchar2 is

v_address varchar2 (30);

begin

select email_address into v_address from email_info where trim (fullname)=trim (s_name);

return v_address;

end ;

//调用函数

select sel_emailinfo ('test_name') from dual;

猜你喜欢

转载自lzhw1985.iteye.com/blog/1830154