zoukankan      html  css  js  c++  java
  • oracle---包--laobai

     包(package)
     作用:逻辑对象的一种。对相关存储过程、函数、变量的封装。
       a 封装,便于调用  b 统一授权
     系统内置包:dbms_output。用于输出。
      standard:常用的函数。异常的定义
    
      自定义包:
      包头:package。声明公有的函数、存储过程及公有变量。
      包体:package body。实现包头声明的函数、存储过程。定义私有变量。
    --调用系统的内置包
    begin
    sys.dbms_output.put_line('111');
    sys.dbms_output.put_line(
    sys.standard.LTRIM(' bbb ')
    );
    end;
    
    --创建自定义包。四则运算工具包
    --创建包头
    create or replace package my_math_pack
    is
      ver varchar2(20):='v0.1版本';  --声明并初始化公有变量
      procedure showauthor; --声明1个公有存储过程。显示作者
      function add(i number,j number)
      return number;   --声明1个公有函数。加法运算
    
      function div(i number,j number)
      return number;   --声明1个公有函数。除法运算。
    end;
    
    --创建包体
    create or replace package body my_math_pack
    is
     -- 实现1个公有存储过程。显示作者 
     procedure showauthor
      as
      begin
         dbms_output.put_line('作者:老白');      
      end;
     
       --实现1个公有函数。加法运算
      function add(i number,j number)
      return number
      as
      begin
          return i+j;
      end;
      
      --实现1个公有函数。除法运算。
      function div(i number,j number)
      return number
      as  
      begin
          return i/j;
      end;
    end;
      
    
    --调用自定义包
    
    begin
     --调用包里的函数 
     dbms_output.put_line(system.my_math_pack.add(8,9));
     system.my_math_pack.showauthor();
     --显示包的公有变量
      dbms_output.put_line(system.my_math_pack.ver);
    end;
    
    
    --练习
      /*
    创建自定义包  my_string_pack
    包含 2个函数声明 
    
        函数1,返回2个字符串中,长度较长的那个
        函数2,如果字符串2是字符串1的子串,返回1,否则返回0.
        */
        
       create or replace package my_string_pack
       is
              function getlonger(str1 varchar2,str2 varchar2)
              return varchar2; 
              function isexists(str1 varchar2,str2 varchar2)
              return number;    
       end;
       
       create or replace package body my_string_pack
       is
            function getlonger(str1 varchar2,str2 varchar2)
              return varchar2
              as
              begin
                  if (length(str1)>length(str2)) then
                      return str1;
                    else
                      return str2;
                   end if;
              end;
              function isexists(str1 varchar2,str2 varchar2)
              return number
              as
              begin
                   if (instr(str1,str2)>'0') then
                   return 1;
                   else
                   return 0;
                   end if;                       
              end;
       end;
       
       
       begin
         dbms_output.put_line(my_string_pack.getlonger('aaa','bbb'));
         dbms_output.put_line(my_string_pack.isexists('aaa','bb'));
       end;
       
       
       --- 案例2,创建my_emp_pack,对emp表进行如下操作
       /*
       1 存储过程,输出所有工资大于等于指定工资的员工号,员工姓名及工资   
       2 函数。获取指定部门号且岗位为"CLERK"的员工的最高工资
       */
       
        --包头
       create or replace package my_emp_pack
       is
    
            procedure show_sal_greater_than(
               in_sal number
            )  ;
    
            function get_max_sal(
               v_deptno number
            )return number;
       end;
       
       --包体
    create or replace package body my_emp_pack
          is
            procedure show_sal_greater_than(
               in_sal number
            )
            as
              --声明1个游标
             cursor v_cur
               is
                select empno,ename,sal from scott.emp where sal>=in_sal;
              v_eno scott.emp.empno%type;
              v_ename scott.emp.ename%type;
              v_sal scott.emp.sal%type;
            begin
                 --打开
                 if (not v_cur%isopen) then
                 open v_cur;
                 end if;
                 --依次提取
                 loop
                    exit when (v_cur%notfound);
                    fetch v_cur into v_eno,v_ename,v_sal;
                    dbms_output.put_line('第'||v_cur%rowcount||':'||v_eno
                    ||','||v_ename||','||v_sal);
                 end loop;
                 --关闭
                 close v_cur;
            end;
    
    
    
            function get_max_sal(
               v_deptno number
            )return number
            as
               v_max number;
            begin
               select sal into v_max from scott.emp
               where deptno = v_deptno and job='CLERK';
               return v_max;
               exception
                  when no_data_found then
                  dbms_output.put_line('找不到记录');
                       return -1;
            end;
       end;
       
       begin
            --system.my_emp_pack.show_sal_greater_than('15000');
           dbms_output.put_line(system.my_emp_pack.get_max_sal('40'));
       end;
    

      

  • 相关阅读:
    GPS时间服务器在广电系统的应用
    时钟系统报价分析
    北斗校时服务器装置介绍
    时钟服务器的安装与调试
    频率计使用说明
    通用计数器使用方法
    WOL持久化配置
    RGB屏驱动流程
    iOS-苹果登陆授权(AppleID SignIn)
    VSCODE自用快捷键备忘
  • 原文地址:https://www.cnblogs.com/ipetergo/p/6256373.html
Copyright © 2011-2022 走看看