一、存储过程与函数概述
关于存储过程与函数概述,包含一下知识点:
1、PL/SQL块分类
(1)、PL/SQL块:匿名块、命名块
匿名块:不保存在数据库中,没有名称,不可以重复调用
命名块:保存在数据库中,有名称,可以重复调用
命名块:存储过程、函数、触发器、包
2、存储过程与函数的概念
存储过程与函数:都是一个子程序,完成一定的功能
存储过程:没有返回值,可以独立调用
函数:必须包含一个返回值,只能作为表达式的一部分使用
写一个例子,对存储过程和函数有一个感性的认识
存储过程:
create procedure proc1(dno number)
is
cursor c is select * from emp where deptno = dno;
begin
for r in loop
dbms_output.put_line(r.name || ':' || r.sal);
end loop;
end;
存储过程的调用:
begin
prov1(50);
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);
dbms_output.put_line(v_maxsal);
dbms_output.putline(func(20));
end;
二、存储过程与函数的创建
关于存储过程与函数创建,包含以下知识点。
1、存储过程的创建
存储过程的创建格式:
CREATE PROCEDURE PROC[(name [IN|OUT|INOUT] type, ... )]
AS | IS
declare statement;
BEGIN
statement;
EXCEPTION
exception process;
END;
参数为IN类型(只可读取参数的值,是不能把参数值传递给外部调用环境的)
create or REPLACE procin(dno in number)
is
v_maxsal number;
begin
select max(sal) into v_maxsal
from emp
where deptno = dno;
dbms_output.put_line(v_maxsal);
end;
调用
begin
procin(10);
end;
参数为OUT类型(只可写参数的值到外部调用环境,不可读取外部的参数值)
create or REPLACE procin(dno in number ,maxx out number)
is
v_maxsal number;
begin
select max(sal) into v_maxsal
from emp
where deptno = dno;
maxx := v_maxsal;
dbms_output.put_line(v_maxsal);
end;
调用:
declare
v_sal number := 0 ;
begin
procin(10,v_sal);
dbms_output.put_line(v_sal);
end;
2、函数的创建
函数的创建格式
CREATE FUNCTION func[(name [IN|OUT|INTOUT] type, ...)]
RETURN retutn_type
AS | IS
declare statement;
BEGIN
statement;
EXCEPTION
exception process;
END;
示例
create function addtwonumber(no1 number , no2 number)
return NUMBER
is
v_result NUMBER;
begin
v_result := no1 + no2;
return v_result;
end;
执行函数:
begin
dbms_output.put_line(addtwonumber(10,20));
end;
三、存储过程与函数的调用和删除
关于存储过程与函数的调用与删除,包含以下知识点
1、存储过程的调用
1、PL/SQL块:
proc[(arg1,...)];
2、SQL Plus环境:
BEGIN
proc[(arg1,...)];
END;
2、函数的调用
1、PL/SQL块:
variable :=func[(arg1,...)];
示例:
declare
v_no number
begin
v_no := addtwonumber(10,20);
dbms_output.putline(v_no);
end;
2、SQL Plus环境:
使用形式与其他SQL中函数相同
3、删除存储过程
DROP PROCEDURE proc_name;
4、删除函数
DROP FUNCTION func_name;