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

得意犹堪夸世俗,诏黄新湿字如鸦。这篇文章主要讲述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;

【PL/SQL包(package)操作实例讲解】使用上述创建包的操作实例源码:
-- 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;

运行结果截图如下:






    推荐阅读