首页 > 代码库 > 程序包的使用

程序包的使用

一、程序包简使用

--创建一个程序包规范,以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   is13   begin14     update emp set  sal = v_sal where empno = v_no;15     commit;16     exception 17       when others then18         dbms_output.put_line(更新薪资时出现异常);19         rollback;20   end;21   -- 修改员工信息,根据姓名22   procedure updateSal(v_name nvarchar2,v_sal number)23   is24   begin25     update emp set  sal = v_sal where ename = v_name;26     commit;27     exception 28       when others then29         dbms_output.put_line(更新薪资时出现异常);30         rollback;31   end;32   -- 获得员工的工资,根据编号33   function getSal(v_no number) return number34   is35   v_sal emp.sal%type;36   begin37       select sal into v_sal from emp where empno = v_no;38       return v_sal;39   end;40 begin41   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) loop15     dbms_output.put_line(v_r.ename);16   end loop;17 end;

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

程序包的使用