一、程序包简使用
--创建一个程序包规范,以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;
三、在程序包中使用动态游标
未完待续……