创建包装规范定义

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

-- 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;

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

PL/SQL包(package)操作实例讲解_PL/SQL创建包规范定义


创建包主体

包体已经在包定义和其他私人声明中声明的各种方法,这是从代码隐藏在包外的代码。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;

运行上述代码截图:

PL/SQL包(package)操作实例讲解_PL/SQL创建包体_02

使用包元素

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

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;

运行结果截图如下:

PL/SQL包(package)操作实例讲解_PL/SQL创建包与包体的语法示例_03