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;
原文地址:https://www.cnblogs.com/Zs-book1/p/11232974.html