• 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;
  • 相关阅读:
    如何保证access_token长期有效
    微信自定义菜单的创建
    是否同一棵二叉搜索树
    Tree Traversals Again(根据前序,中序,确定后序顺序)
    List Leaves 树的层序遍历
    leetcode-优美的排列
    leetcode-下一个排列
    leetcode-二进制手表
    leetcode-组合总数III(回溯)
    leetcode-累加数(C++)
  • 原文地址:https://www.cnblogs.com/Zs-book1/p/11232974.html
Copyright © 2020-2023  润新知