oracle学习笔记-plsql子程序介绍
子程序包含过程、函数、触发器和包。
(1)过程:用于执行特定的操作。
CREATE OR REPLACE procedure update_deptname(name varchar2,newname varchar2)
is
begin
update scott.dept set dname=newname
WHERE lower(dname)=lower(name);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
DBMS_OUTPUT.put_line ('没有找到该部门!');
END;
/
通过如下方式执行过程。
exec update_deptname('SALES','SALE');
该过程会将dept表中dname是sales的更改成sale。
(2)函数:返回特定数据
函数头部必须包含return子句,函数体内必须包含return语句返回数值。
create or replace function count_dept
return varchar2
is
num varchar2(20);
begin
select count(*) into num
from scott.dept;
return num;
end;
var num varchar2
exec :num:=count_dept
print num
/
NUM
--------------------------------
4
(3)包:用于组合相关的过程和函数,它由包头和包体两部分组成。
包头用于定义公用的常量、变量、过程和函数,并没有具体实现过程和函数。
包体用于实现包头中的过程和函数。
包头:
create or replace package dept_pkg
is
procedure update_deptname(name varchar2,newname varchar2);
function count_dept return varchar2;
end;
包体:
create or replace package body dept_pkg
is
procedure update_deptname(name varchar2,newname varchar2)
is
begin
update scott.dept set dname=newname
WHERE lower(dname)=lower(name);
END;
function count_dept
return varchar2
is
num varchar2(20);
begin
select count(*) into num
from scott.dept;
return num;
end;
end;
调用方法:包名.子程序名。其它方案包:方案名.包名.子程序名
例如:
exec DEPT_PKG.UPDATE_DEPTNAME('SALES','SALE');
var count varchar2(20)
exec :count:=DEPT_PKG.COUNT_DEPT;
print count
/
count
--------------------
4
(4)触发器的知识后续章节将要介绍。