PL/SQL包(package)操作实例讲解

创建包装规范定义

规范是接口到包。它只是声明的类型,变量,常量,异常,游标和子程序可从封装外部引用。置于规范的所有对象被称为公共对象。任何子程序在封装主体中没有包定义但编码被称为私有对象。下面的代码片段显示了具有多个的程序包规范定义。一个包中可以定义的全局变量和多个程序或函数。

-- Created on 2018/4/2 by E.WANG 
-- 创建包规范定义
create or replace package math_package
as
  --创建两个整数加法存储过程
  procedure add(a in int,b in int,c out int);
  --创建两个是整数的减法函数
  function sub(a in int,b in int ,c out int) return int;
  --创建乘法存储过程
  procedure mul(a in int,b in out int);
  
  --创建除法函数
  function div(a in int ,b in out number) return number;
end math_package;

运行上述代码给出如下截图:



创建包主体

包体已经在包定义和其他私人声明中声明的各种方法,这是从代码隐藏在包外的代码。CREATE PACKAGE BODY语句用于创建包体。下面的代码片段显示了包体声明上面创建的math_package包:

-- Created on 2018/4/2 by E.WANG 
--给包math_package创建包体
create or replace package body math_package
as
  --创建两个整数加法存储过程
  procedure add(a in int,b in int,c out int)
  is
  begin
    c:=a+b;
    dbms_output.put_line(a || ' + ' || b || ' = ' || c); 
  end add;
  --创建两个是整数的减法函数
  function sub(a in int,b in int ,c out int) return int 
  is
  begin
    if a>b then
       c:=a-b;
    else
       c:=b-a;
    end if;
    return c;
    exception 
       when VALUE_ERROR then dbms_output.put_line('The value is error!');     
  end sub;
  --创建乘法存储过程
  procedure mul(a in int,b in out int)
  is
  tmp int;
  begin
   tmp:=b;
   b:=a*b;
   dbms_output.put_line(a || ' * ' || tmp || ' = ' || b); 
  end mul;
  
  --创建除法函数
  function div(a in int ,b in out number) return number
  as
  begin
     if b!=0 then
        b:=a/b;
     else
        raise ZERO_DIVIDE;
     end if;
     return b;
     exception 
       when ZERO_DIVIDE then dbms_output.put_line('ZERO_DIVIDE');    
  end div;
end math_package;

运行上述代码截图:


使用包元素

访问包元素(变量,过程或函数)的语法如下:

package_name.element_name;

使用上述创建包的操作实例源码:

-- Created on 2018/4/2 by E.WANG 
declare 
  --定义几个变量
  a int;
  b int;
  c int;
  d number;
  tmp number;
begin
  --给a,b赋值
  a:=10;
  b:=20;
  d:=0;
  --调用math_package的add存储过程
  math_package.add(a,b,c);
  --调用math_package的mul存储过程
  math_package.mul(a,b);
  --重新给变量赋值
  a:=10;
  b:=20;
  --调用math_package的sub函数
  c:=math_package.sub(a,b,c);
  if a>b then
     dbms_output.put_line(a || ' - ' || b || ' = ' || c); 
  else
     dbms_output.put_line(b || ' - ' || a || ' = ' || c); 
  end if;
  
  --调用math_package的div函数
  d:=2;
  tmp:=d;
  d:=math_package.div(a,d);
  dbms_output.put_line(a || ' / ' || tmp || ' = ' || d); 
end;

运行结果截图如下:



猜你喜欢

转载自blog.csdn.net/henni_719/article/details/79784500