zoukankan      html  css  js  c++  java
  • oracle学习笔记9:程序包

    关于程序包的概念详细说明等,请查看https://www.cnblogs.com/huyong/archive/2011/05/26/2057973.html

    博主写的很详细,这里就不再细说,包类似于Java中的类,包用来放存储过程以及函数,存储过程以及函数就类似与java中的方法,当使用包中的方法时就通过包名来调用

    使用程序包比较符格面向对象的思想

      -- 包的创建
      create or replace package 包名
    as
      全局变量名 变量类型
      procedure 过程名(参数);
      function 函数名(参数);
    end 包名;
    --     包体的创建
      create or replace package body 包名
    as
      procedure 过程名(参数)
      as
        声明变量部分;
      begin
        存储过程代码块;
      end;
        
      function 函数名(参数)
        return 返回值类型
      as
      begin
        函数代码块;
        return 返回结果;
      end;
    end 包名;

    下面举个例:

    -- 创建包
    create package pack1
    as
    --   创建常量
      v_pi constant number(7) := 3.1415926;
    --   定义获的面积函数
      function getArea(v_r number) return number;
    --   定义过程
      procedure pro2;
    end pack1;
    
    --   创建包体
    create package body pack1
    as
      v_area number(5, 2);
    --     实现函数
      function getArea(v_r number) return number
      as
      begin
        v_area := power(v_r,2) * v_pi;
        return v_area;
      end;
    --     实现过程
      procedure pro2
      as
      begin
        dbms_output.put_line('面积为:' || v_area);
      end;
    end pack1;
    
    declare
      v_area number;
      begin
    --   调用
      v_area:=pack1.getArea(5);
      pack1.pro2;
    end;

    模拟一个转账案例

    create or replace package pack2
    as
      function getMoney(v_name bank.name%type) return bank.money%type;
      procedure zhuan(name1 bank.name%type, name2 bank.name%type, money1 bank.money%type);
    end pack2;
    
    create or replace package body pack2
    as
      function getMoney(v_name bank.name%type) return bank.money%type
      as
        v_money bank.money%type;
      begin
        select money into v_money from BANK where name = v_name;
        dbms_output.put_line(v_name||'余额:'||v_money);
        return v_money;
      end;
    
      procedure zhuan(name1 bank.name%type, name2 bank.name%type, money1 bank.money%type)
      as
      begin
        update bank set money=money + money1 where name = name1;
        update bank set money=money - money1 where name = name2;
        commit;
      exception
        when others then
          dbms_output.put_line('余额不足');
          rollback;
      end;
    end pack2;
    
      declare
        v_money bank.money%type;
        begin
        pack2.zhuan('zhangsan','lisi',500);
        v_money:=pack2.getMoney('zhangsan');
      end;
  • 相关阅读:
    Regular Expression Basic
    Getting http address from text file by awk script
    日报、周报,项目进度汇报有意义吗?
    目不转睛地盯着电脑屏幕,认真找Bug的你
    这组朋友圈,得罪了半个互联网圈!
    2021年,让你看透世界的8个底层逻辑
    再见,胡阿姨!再见,共享单车!
    @所有人,2021新年快乐,每个人都了不起!
    为了实现而工程,大道至简第五章读后感
    Java第四次上课博文动手动脑
  • 原文地址:https://www.cnblogs.com/Zs-book1/p/11232974.html
Copyright © 2011-2022 走看看