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