程序包
语法:
Create [or replace] package pack_name is
[declare_variable];---规范内声明的变量
[declare_type];-----规范内声明的类型
[declare_cursor];----规范内定义的游标
[declare_function];---规范内声明的函数
[declare_procedure];----规范内声明的存储过程
End [pack_name]----包的名称
例子:
Create or replace package pack_emp is
Function fun_avg_sal(num_deptno number)return number;--获取指定部门的平均工资
Procedure pro_regulate_sal(var_jobvarchar2,num_proportion number);--按照指定比例上调指定职位的工资
End pack_emp;
/
程序包主体:
Create [or replace] package body pack_name is
[inner_variable]—内部变量
[cursor_body]-----游标主体
[function_title]---从规范中引入的函数头部声明
{ begin
Fun_plsql;-----函数主要功能的实现部分
[exception]
[dowith_sentences;]---异常处理语句
End [fun_name]}---函数名称
[procedure_title]----- 从规范中引入的存储过程头部声明
{
Begin
Pro_plsql;-----存储过程主要功能的实现部分
[exception]
[dowith_sentences]---异常处理语句
End[pro_name]}---存储过程的名称
‘’’’’’’’
End [pro_name];---包名
例子:
Create or replace package body pack_emp is
Functionfun_avg_sal(num_deptno number) return number is
Num_avg_sal number;
Begin
Selectavg(sal)
Into num_avg_sal
From emp
Where deptno=num_deptno;
Return(num_avg_sal);
Exception
Whenno_data_found then
Dbms_output.put_line(‘该部门编号不存在雇员记录’);
Return 0;
End fun_avg_sal;
Procedure pro_regulate_sal(
Var_job varchar2,
Num_propprtion number) is
Begin
Updateemp
Setsal=sal*(1+num_proportion)
Wherejob=var_job;
End pro_regulate_sal;
End pack_emp;
调用:
Declare
Num_deptnoemp.deptno%type;
Var_job emp.job%type;
Num_avg_sal emp.sal%type;
Num_proportion number;
Begin
Num_deptno:=10;
Num_avg_sal:=pack_emp.fun_avg_sal(num_deptno);
Dbms_output.put_line(num_deptno||’号部门平均工资是:’||num_avg_sal);
Var_job:=’SALESMAN’;
Num_proportion:=0.1;
Pack_emp.pro_regulate_sal(var_job,num_proportion);
End;
/
删除包:
Drop package ‘包名’;