Oracle的包实例

调用

declare
  v_empno emp.empno%type:=&empno;
  v_ename emp.ename%type:=&name;
  v_sal emp.sal%type:=&salary;
  v_deptno emp.deptno%type:=&deptno;
  e_dup_val EXCEPTION;
  e_no_dept EXCEPTION;

  pragma exception_init(e_dup_val,-20001);
  pragma exception_init(e_no_dept,-20008);
begin
   emp_package.add_emp_proc(v_empno,v_ename,v_sal,v_deptno);
   Commit;
EXCEPTION
   when e_dup_val then
       DBMS_OUTPUT.put_line(SQLERRM);
   when e_no_dept then
       DBMS_OUTPUT_put_line(SQLERRM);
   Rollback;
end;

子程序重载及相关操作

所谓的重载是指两个或多个子程序有相同的名称,但拥有不同的参数变量、参数顺序或参数数据类型

包规范的创建

create or replace package overload_pkh
as 
   function get_info(eno number) return emp%ROWTYPE;
   Function get_info(name varchar2) return emp%ROWTYE;

   procedure del_emp(eno number);
   procedure del_emp(name varchar);
end;

创建包体

create or replace package body overload_pkg
as
   function get_info(eno number) return emp%rowtype;
   as
       emp_record emp%rowtype;
   begin
       select * into emp_record from emp where empno=eno;
       return  emp_record;
   exception
       when no_data_found then
          raise_application_error(-20020,'不存在此员工!');

     end;

   function get_info(name varchar) return emp%rowtype;
   as
       emp_record emp%rowtype;
   begin
       select * into emp_record from emp where ename=name;
       return  emp_record;
   exception
       when no_data_found then
          raise_application_error(-20020,'不存在此员工!');

     end;

    procedure del_emp(eno number)
    is
    begin
        delete from emp where empno=eno;
        if  sql%notfound then
              raise_application_error(-20020,'不存在此员工!');

        end if;
    end;
     procedure del_emp(ename varchar)
    is
    begin
        delete from emp where ename=name;
        if  sql%notfound then
              raise_application_error(-20020,'不存在此员工!');

        end if;
    end;

end;

根据员工号查询员工信息

declare 
     emp_record emp%rowtype;
     e_no_emp exception;
     pragma exception_init(e_no_emp,-20020);
begin
     emp_record:=overload.pkg.get_info(&no);
     DBMS_OUTPUT.put_line(emp_record.empno);
Exception
     when e_no_emp then
         DBMS_OUTPUT.put_line(SQLERRM);
end;

调用员姓名查询员工信息

declare 
     emp_record emp%rowtype;
     e_no_emp exception;
     pragma exception_init(e_no_emp,-20020);
begin
     emp_record:=overload.pkg.get_info(&name);
     DBMS_OUTPUT.put_line(emp_record.empno);
Exception
     when e_no_emp then
         DBMS_OUTPUT.put_line(SQLERRM);
end;

参考:http://www.51zxw.net/show.aspx?id=61838&cid=616

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值