甲骨文专题15之包

  

1,包的概述

  

,什么是包吗?

  
      <李>包是一组相关过程,函数,变量,常量和游标等PL/SQL程序设计元素的组合。   

    b,包的特点吗?

      <李>它具有面向对象程序设计语言的特点,是对PL/SQL程序设计元素(过程,函数,变量等)的封装。   <李>它使程序设计模块化。   

    c,包中的程序元素

      <李>包中的程序元素分为两种:公用元素(公用组件),私用元素(私用组件)。   

    e,包的组成

      <李>一个包由两个分开的部分组成:李   <李>包规范(包定义):用于定义包的公用组件,包括常量,变量,游标,过程和函数等。   <李>包体(包主体):用于实现包规范所定义的公用过程和函数。包体不仅可用于实现公用过程和函数,而且还可以定义包的私有组件(变量,游标,过程,函数等)。   

    f,简单代码示例

      <李>创建包规范和包体的示例代码   
     <代码>——创建包规范
      first_package创建或替换包
      是
      v_no emp.deptno %类型:=10;
      ——过期
      过程query_emp (v_deptno数量默认v_no v_avgsal数量,v_cnt数量);
      first_package结束;
      ——创建包体
      身体first_package创建或替换包
      是
      过程query_emp (v_deptno数量默认v_no v_avgsal)数量,v_cnt数量)
      是
      开始
      选择avg (sal), count(*)到v_avgsal v_cnt从emp deptno=v_deptno;
      异常
      当NO_DATA_FOUND
      dbms_output.put_line('没有此部门”);
      当别人然后
      dbms_output.put_line (SQLERRM);
      结束;
      first_package;  
      <李>调用包中的存储过程:   
     <代码>声明
      v_avgsal数量;
      v_cnt数量;
      开始
      first_package。query_emp (20 v_avgsal v_cnt);
      DBMS_OUTPUT。put_line(“平均工资:“| | v_avgsal);
      DBMS_OUTPUT。put_line(“总人数:“| | v_cnt);
      结束; 
      

    2,包的创建

      

    ,创建包规范

      <李>语法格式如下:   
     <代码> package_name创建(或更换)包
      是|
      ——定义公用常量,变量,游标,过程,函数等
      结束[package_name];  
      <李>   

    示例代码:

      
     <代码> emp_package创建或替换包
      是
      ——添加员工信息的存储过程
      过程add_emp_proc
      (v_empno emp.empno %类型,
      v_ename emp.ename %的类型,
      v_sal emp.sal %的类型,
      v_deptno emp.deptno %类型);
      
      ——删除员工信息的存储过程
      过程del_emp_proc
      (v_empno emp.empno %类型);
      结束emp_package;  
      

    b,创建包体

      李   <李>语法格式如下:   
     <代码>身体package_name创建(或更换)包
      是|
      ——定义私有常量,变量,游标,过程和函数等
      ——实现公用过程和函数
      结束[package_name];  
      <李>   

    示例代码:

      
     <代码>身体emp_package创建或替换包
      是
      ——添加员工信息的存储过程
      过程add_emp_proc
      (v_empno emp.empno %类型,
      v_ename emp.ename %的类型,
      v_sal emp.sal %的类型,
      v_deptno emp.deptno %类型)
      是
      e_2291例外;
      编译指示EXCEPTION_INIT (e_2291, -2291);
      开始
      插入emp (empno, ename, sal deptno)值(v_empno, v_ename, v_sal v_deptno);
      异常
      当DUP_VAL_ON_INDEX
      RAISE_APPLICATION_ERROR(-20001年的员工号不能重复”);
      当e_2291
      RAISE_APPLICATION_ERROR(-20002年,“部门号不存在的);
      结束;
      
      ——删除员工信息的存储过程
      过程del_emp_proc
      (v_empno emp.empno %类型)
      是
      开始
      ,根据员工号删除指定的员工信息
      删除从emp empno=v_empno;
      ——判断是否删除成功
      如果SQL % NOTFOUND然后
      RAISE_APPLICATION_ERROR(-20009’,指定删除的员工不存在的);
      其他的
      DBMS_OUTPUT.PUT_line(“删除成功”);
      如果;
      结束;
      结束emp_package;  
      

    c,包创建的过程案例代码

      李   <李>   

    根据员工号查询工资,如果工资小于等于3000年工资涨500 .

      
     <代码>——创建包规范
      emp_sal_pkg创建或替换包
      是
      函数get_sal (eno数量)返回数量;
      
      过程upd_sal (eno数,工资数);
      emp_sal_pkg结束;
      
      ——包体
      身体emp_sal_pkg创建或替换包
      是
      函数get_sal (eno数量)返回数量
      是
      v_sal emp.sal %类型:=0;
      开始
      选择sal在v_sal从emp empno=eno;
      返回v_sal;
      异常
      当NO_DATA_FOUND
      RAISE_APPLICATION_ERROR(-20010年,“此员工号不存在的);
      结束;
      
      过程upd_sal (eno数,工资数)
      是
      开始
      如果薪水& lt;=3000
      更新emp组sal=萨尔+ 500,empno=eno;
      如果;
      结束;
      emp_sal_pkg结束;

    甲骨文专题15之包