• 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)
              is    
              begin
                select 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 is select * from emp where empno=v_no;
              begin
                  open 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;
              begin
                select sal into v_sal from emp where empno=v_no;
                return v_sal;
              end;
    
            function findEmpByEmpnoFun(v_no emp.empno%type) return emp%rowtype 
              is
                     cursor emp_info is select * from emp where empno=v_no;
                     empinfo emp%rowtype;
              begin
                      open 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;
  • 相关阅读:
    Installing OpenSSH from the Settings UI on Windows Server 2019 or Windows 10 1809
    [CB]Intel 2018架构日详解:新CPU&新GPU齐公布 牙膏时代有望明年结束
    [百科]数字孪生
    wifi 标准
    WM_CONCAT和LISTAGG 语法例子
    Informix 启动 Fatal error in shared memory initialization解决方法
    B站日志系统的前世今生
    nginx安全日志分析脚本的编写
    可视化web日志分析工具Logstalgia
    CDH-5.7.0:基于Parcels方式离线安装配置
  • 原文地址:https://www.cnblogs.com/64Byte/p/12747076.html
Copyright © 2020-2023  润新知