• 程序包的使用


    一、程序包简使用

    --创建一个程序包规范,以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;

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

  • 相关阅读:
    QA问答系统,QA匹配论文学习笔记
    HMM Viterbi算法 详解
    py2 to py3 return iterator
    git 的回退
    mysql之group_concat函数详解
    sqlserver系统表使用
    Spring事务配置的五种方式
    MySQL 触发器简单实例
    64位Java开发平台的选择,如何区分JDK,Tomcat,eclipse的32位与64版本
    HSSFWorkbook和XSSFWorkbook的区别
  • 原文地址:https://www.cnblogs.com/yunwei1237/p/5895820.html
Copyright © 2020-2023  润新知