程序包的使用

一、程序包简使用

--创建一个程序包规范,以scott.emp表为数据

 1 --程序包
 2 create or replace package emp_package
 3 is
 4 minsal emp.sal%type;--最小工资
 5 maxsal emp.sal%type;--最大工资
 6 -- 添加员工信息
 7 procedure addEmp(v_no number,v_name nvarchar2,v_sal number,v_deptno number);
 8 -- 修改员工信息,根据编号 
 9 procedure updateSal(v_no number,v_sal number);
10 -- 修改员工信息,根据姓名
11 procedure updateSal(v_name nvarchar2,v_sal number);
12 -- 获得员工的工资,根据编号
13 function getSal(v_no number) return number;
14 end;

--创建包的主体,以scott.emp表为数据

 1 -- 包主体 
 2 create or replace package body emp_package
 3 is
 4   -- 添加员工信息
 5   procedure addEmp(v_no number,v_name nvarchar2,v_sal number,v_deptno number)
 6   is
 7   begin
 8     insert into emp(empno,ename,sal,deptno) values(v_no,v_name,V_sal,v_deptno);
 9   end;
10   -- 修改员工信息,根据编号 
11   procedure updateSal(v_no number,v_sal number)
12   is
13   begin
14     update emp set  sal = v_sal where empno = v_no;
15     commit;
16     exception 
17       when others then
18         dbms_output.put_line('更新薪资时出现异常');
19         rollback;
20   end;
21   -- 修改员工信息,根据姓名
22   procedure updateSal(v_name nvarchar2,v_sal number)
23   is
24   begin
25     update emp set  sal = v_sal where ename = v_name;
26     commit;
27     exception 
28       when others then
29         dbms_output.put_line('更新薪资时出现异常');
30         rollback;
31   end;
32   -- 获得员工的工资,根据编号
33   function getSal(v_no number) return number
34   is
35   v_sal emp.sal%type;
36   begin
37       select sal into v_sal from emp where empno = v_no;
38       return v_sal;
39   end;
40 begin
41   select max(sal) into maxsal from emp;
42   select min(sal) into minsal from emp;
43 end;

以下是测试代码:

 1 -- 程序包
 2 declare 
 3 v_minsal emp.sal%type;
 4 v_sal emp.sal%type;
 5 begin
 6   v_minsal :=emp_package.minsal;
 7   dbms_output.put_line(v_minsal);
 8   emp_package.updateSal('BLAKE',600.00);
 9   v_sal :=emp_package.getSal(7698);
10   dbms_output.put_line(v_sal);
11   emp_package.addEmp(7777,'abc',7000,10);
12 end;

 

二、在程序包中使用静态游标

 1 -- 定义包规范
 2 create or replace package pkg_emp 
 3 is
 4    cursor getEmpInfo(empno varchar2) return emp%rowtype;
 5 end;
 6 --定义包主体
 7 create or replace package body pkg_emp
 8 is
 9    cursor getEmpInfo(empno varchar2) return emp%rowtype is 
10    select * from emp where empno = empno;
11 end; 
12 -- 测试代码
13 begin 
14   for v_r in pkg_emp.getEmpInfo(7369) loop
15     dbms_output.put_line(v_r.ename);
16   end loop;
17 end;

三、在程序包中使用动态游标
  未完待续……

posted @ 2016-09-22 12:24  云苇  阅读(217)  评论(0编辑  收藏  举报