Oracle数据库程序包全局变量的应用
1
前言
在程序实现过程中,经常用遇到一些全局变量或常数。在程序开发过程中,往往会将该变量或常数存储于临时表或前台程序的全局变量中,由此带来运行效率降低<频繁读取临时表>或安全隐患<存于前台程序变量,可跟踪内存变量获得>。
本文主要论述将全局变量或常数存取程序包的优点和实现方法。
2
优点
2.1
执行效率比存储于临时表高,不需要频率存取临时表
2.2
将全局变量藏于最后防线<数据库>,安全性较高
2.3
在视图中可以调用程序包的变量,实现动态视图
3
实现
3.1
实现方法概述
Oracle数据库程序包中的变量,在本程序包中可以直接引用,但是在程序包之外,则不可以直接引用。对程序包变量的存取,可以为每个变量配套相应的存储过程<用于存储数据>和函数<用于读取数据>来实现。
3.2
实例
--定义程序包
create or replace
package PKG_System_Constant
is
C_SystemTitle
nVarChar2(100):=‘测试全局程序变量‘; --定义常数
--获取常数<系统标题>
Function
FN_GetSystemTitle
Return
nVarChar2;
G_CurrentDate
Date:=SysDate; --定义全局变量
--获取全局变量<当前日期>
Function
FN_GetCurrentDate
Return
Date;
--设置全局变量<当前日期>
Procedure SP_SetCurrentDate
(P_CurrentDate In
Date);
End
PKG_System_Constant;
/
create or
replace package body PKG_System_Constant is
--获取常数<系统标题>
Function
FN_GetSystemTitle
Return
nVarChar2
Is
Begin
Return C_SystemTitle;
End
FN_GetSystemTitle;
--获取全局变量<当前日期>
Function
FN_GetCurrentDate
Return
Date
Is
Begin
Return G_CurrentDate;
End
FN_GetCurrentDate;
--设置全局变量<当前日期>
Procedure
SP_SetCurrentDate
(P_CurrentDate In
Date)
Is
Begin
G_CurrentDate:=P_CurrentDate;
End
SP_SetCurrentDate;
End
PKG_System_Constant;
/
3.3
测试
--测试读取常数
Select
PKG_System_Constant.FN_GetSystemTitle From
Dual;
--测试设置全局变量
Declare
Begin
PKG_System_Constant.SP_SetCurrentDate(To_Date(‘2001.01.01‘,‘yyyy.mm.dd‘));
End;
/
--测试读取全局变量
Select
PKG_System_Constant.FN_GetCurrentDate From
Dual;
====================
听说:package的全局变量只针对一个会话中有用,是不是这样???待验证。