PLSQL中的存储过程与函数

1.存储过程与函数概述
PL\SQL块分类:匿名块、命名块
匿名块:不保存在数据库中,没有名称,不可以重复调用;
命名块:保存在数据库中,有名称,可以重复调用;
包括存储过程、函数、触发器、包;
存储过程与函数:都是一个子程序,完成一定的功能;
存储过程:没有返回值,可以独立调用;
函数:必须包含一个返回值,只能作为表达式的一部分使用;

eg:(存储过程)
create procedure pro1(dno number)
is
cursor cur is select * from emp where deptno=dno;
begin
for r in c loop
dbms_output.put_line(r.name ||':' |r.sal|);
end loop;
end;

调用:
begin
pro1(10);
end

(函数)
create function func(dno number)
return number
is
v_max number;
begin
select max(sal) into v_max;
from emp;
where deptno=dno;
return v_max;
end;

函数调用:
declare
v_maxsal number;
begin
v_maxsal:=func(10);
end;
2.存储过程和函数的创建
eg:(in 类型参数和out 类型参数)
create or replace procedure procin(dno in number,ret out number)
is
v_maxsal number;
begin
select max(sal) into v_maxsal
from emp
where deptno=dno;
out:=v_maxsal;
end;

调用:
declare
retnum number;
begin
procin(10,retnum);
dbms_output.put_line(retnum);
end;

函数的创建:
create function addnum(no1 number,no2 number)
return number
is
v_result number;
begin
v_result:=no1+no2;
return v_result;
end;

调用:
begin
dbms_output.put_line(addnum(10,20));
end;
3.存储过程与函数的调用和删除
存储过程调用:
PL/SQL块:proc[(arg1,...)]
直接调用:begin
proc[(arg1,...];
end;
函数调用:
PL/SQL块:variable:=func[(arg1,...)];
直接调用:使用形式与其他sql中函数相同;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章