数据库中函数的存储过程区别;
存储过程和函数都是为了 可重复的 执行数据库中的sql语句集合。 存储过程相对比较复杂,可以输出多个参数,而函数相对比较简单,针对性比较强,输出的是值或者表对象。
写法上:
1.存储过程:参数列表可以有 in 、out、in out参数。
2.函数:参数列表 in 参数 , 并且有return<返回值类型,无参数类型>。
返回值上;
1.存储过程:可以返回多个值。
2.函数:返回一个值
调用方式上:
1.存储过程:exec|execute 过程名。pl/sql直接调用。
2.函数:pl/sql直接调用。可以select 函数名 from dual;
语法上:
1.存储过程:
create or replace procedure 过程名(in、out、in out参数)
is | as
变量名 初始化
begin
执行体
exception
捕获异常 从错处理
end
例子:
create or replace procedure up_wap(v_param1 in out varchar2,v_param2 in out varchar2)
is
v_temp varchar2(20);
begin
dbms_output.put_line('交换前参数1:'||v_param1||' 参数2:'||v_param2);
v_temp:=v_param1;
v_param1:=v_param2;
v_param2:=v_temp;
dbms_output.put_line('交换后参数1:'||v_param1||' 参数2:'||v_param2);
exception
when others then dbms_output.put_line('There is a error when the procedure up_wap executing!');
end up_wap;
-- 调用存储过程
declare
v_param1 varchar2(20):='param1';
v_param2 varchar2(20):='param2';
begin
up_wap(v_param1 => v_param1,v_param2 => v_param2);
end;
2.函数:
create function 函数名(in 参数)
return <返回值类型、无长度说明>
is | as
变量初始化 声明
begin
执行体
return < 返回值>
exception
捕获异常 从错处理
end 函数名
例子:
create function uf_select_name_by_id_test(v_id in number)
return varchar2
is
v_name t_test.t_name%type;
begin
select t_name into v_name from t_test where t_id=v_id;
return v_name;
exception
when others then dbms_output.put_line('error');
end uf_select_name_by_id_test;
/
select uf_select_name_by_id_test(1) 姓名 from dual;-- select调用
declare --pl/sql语句块调用
v_name varchar2(20);
begin
v_name:=uf_select_name_by_id_test(1);
dbms_output.put_line('name = '||v_name);
end;
/