|
程序包是一种数据对象,它是对相关pl/sql类型,子程序,游标,异常,变量和常量的封装.它包含两部内容:程序包规范和程序包主体.在程序包规范中,可以声明类型,变量,常量,异常,游标和子程序.程序包主体用于实现包规范中定义的内容.OK,一起来看看代码. --包规范(类似接口) create or replace package pack1 is procedure updatesal(dno number);--过程 function selectename(eno number) return varchar2;--函数 end pack2; --包主体(类似接口的实现) create or replace package body pack1 is procedure updatesal(dno number) is begin --每个员工加资金1000,如果工资+资金少于2000的则再继续加奖金500 update emp set comm=case when nvl(comm,0)+sal<2000 then nvl(comm,0)+1500 else nvl(comm,0)+1000 end where deptno=dno; end; --根据编号查找员工 function selectename(eno number) return varchar2 is e_ename varchar2(20); begin select ename into e_ename from emp where empno=eno; return e_ename; end; end pack2; --调用 declare dno number; eno number; e_name varchar2(20); begin dno:=&请输入部门编号; eno:=&请输入员工编号; pack1.updatesal(dno); e_name:=pack1.selectename(eno); dbms_output.put_line(e_name); end;
OK,在来看看程序包中的游标.看代码咯. --创建包规范 create or replace package pack2 is cursor c_cur(eno number) return emp%rowtype;--游标 procedure e_pro(eno number);--过程 end pack3; --创建包主体 create or replace package body pack2 is cursor c_cur(eno number) return emp%rowtype is select *from emp where deptno=eno; procedure e_pro(eno number) is rec emp%rowtype; begin open c_cur(eno); loop fetch c_cur into rec; exit when c_cur%notfound; dbms_output.put_line(rec.ename); end loop; close c_cur; end e_pro; end pack2; --调用 declare e_no number; begin e_no:=&abc; pack2.e_pro(e_no); end; 说明: 游标的定义也是分为两部分:游标规范和游标主体.在包规范中声明游标规范时必须通过return子句指定游标的返回类型.return子句可以由以下两个数据类型结构中的任一组成. 1.使用%rowtype属性根据数据库表定义的记录. 2.根据程序员定义的记录类型的记录.
|
一共有 0 条评论