当前位置:首页 > 数据库 > Oracle

Oracle--包

  把之前独立的存储过程,函数 写在一起, 形成一个模块, 方便管理维护

包: 分为:

  1. 包的头部 函数,存储过程的声明,游标的声明
  2. 包的主体: 对函数,过程进行实现
            --
            包的头部的语法:
            create
            or
            replace
             package 包名
    
            is
            
       过程或函数的定义
       ….
    
            end
            ;


  
            --
            注意: 同一个包, 包的头部的名字与包主体的名字一样
            --
            包的主体的语法:
            create
            or
            replace
             package body 包名
     
            is
            --
            对包的头部定义函数, 过程的实现
            end
            ;


            --
             包也是oracle对象, 保存在数据库中
        

例:

包的头部:

            create
            or
            replace
             package mypkg 
 
            is
            procedure findSalByEmpno(v_no in emp.empno%type,v_sal out emp.sal%type);
        procedure findEmpByEmpno(v_no in emp.empno%type,empinfo out emp%rowtype);
        function findSalByEmpnoFun(v_no emp.empno%type) return emp.sal%type;
        function findEmpByEmpnoFun(v_no emp.empno%type) return emp%rowtype;
 end;

包的主体:

            create
            or
            replace
             package body mypkg

            is
            --
            对包的头部中定义的函数, 过程进行实现, 其实就是过程,函数完整写法
            procedure findSalByEmpno(v_no in emp.empno%type,v_sal out emp.sal%type)
          isbeginselect sal into v_sal from emp where empno=v_no;
          end;

        procedure findEmpByEmpno(v_no in emp.empno%type,empinfo out emp%rowtype)
          is--静态的游标cursor emp_info isselect*from emp where empno=v_no;
          beginopen emp_info;
              fetch emp_info into empinfo;
              close emp_info;
          end;

        function findSalByEmpnoFun(v_no emp.empno%type) return emp.sal%type 
          is
                 v_sal emp.sal%type;
          beginselect sal into v_sal from emp where empno=v_no;
            return v_sal;
          end;

        function findEmpByEmpnoFun(v_no emp.empno%type) return emp%rowtype 
          iscursor emp_info isselect*from emp where empno=v_no;
                 empinfo emp%rowtype;
          beginopen emp_info;
                  fetch emp_info into empinfo;
                  close emp_info;
                  return empinfo;
          end;
end;

执行:

            --
            调用包中存储过程和函数     包名.存储过程名        包名.函数
            
--
            
                调用函数,  只能在PL/sql
            declare
            
  v_emp emp
            %
            rowtype;
  V_sal emp.sal
            %
            type;

            begin
            
   v_emp :
            = MYPKG.FINDEMPBYEMPNOFUN(7788);
   v_sal := MYPKG.FINDSALBYEMPNOFUN(7788);
   dbms_output.put_line(v_emp.ename);
    dbms_output.put_line(v_sal);
end;

--select MYPKG.FINDSALBYEMPNOFUN(7788) from dual;
--调用存储过程declare
  v_emp emp%rowtype;
  V_sal emp.sal%type;
begin
   MYPKG.FINDEMPBYEMPNO(7788,v_emp);
   MYPKG.FINDSALBYEMPNO(7788,V_sal);
   dbms_output.put_line(v_emp.ename);
    dbms_output.put_line(v_sal);
end;

 

原文:https://www.cnblogs.com/64Byte/p/12747076.html


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!