存储过程和用户定义函数都是“SQL语句组成的子程序,用以封装代码以便重复使用”。但区别也是显而易见的。简单说,存储过程功能强大,但调用不便,用户函数正相反。
自定义函数:
数据库中函数包含四个部分:声明、返回值、函数体和异常处理。
无参数的函数
Create or replace function user_list //声明函数
Return varchar2
Is v_user varchar2(50);//定义返回值
Begin//函数体
Select username into v_user from user_users
Return v_usr;
End get_user;
测试:
Select get_user from dual;
有in参数的函数
Create or replace funtion getuser(v_id in number)
Return varchar2
As v_name varchar(50);
Begin(into 是赋值给v_name)
Select name into v_name from employerr where id=_v_id;
Return v_name;
Exception //异常抛出
When no data found then
Raise application error(-20001,’输入的ID无效’);
End get_user;
存储过程:
存储过程(Stored Procedure),就是一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过编译后存储在数据库系统中。在使用时候,用户通过指定已经定义的存储过程名字并给出相应的存储过程参数来调用并执行它,从而完成一个或一系列的数据库操作。
Oracle存储过程包含三部分:过程声明,执行过程部分,存储过程异常
create or replace procedure runbyparmeters
(isal in emp.sal%type,
sname out varchar,
sjob in out varchar)
as
icount number;
begin
select count(*) into icount from emp where sal>isal and job=sjob;
if icount=1 then
....
else
end if;
exception
when too_many_rows then
DBMS_OUTPUT.PUT_LINE('返回值多于1行');
when others then
DBMS_OUTPUT.PUT_LINE('在RUNBYPARMETERS过程中出错!');
end;