一、存儲過程與函數概述
關于存儲過程與函數概述,包含一下知識點:
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;