zoukankan      html  css  js  c++  java
  • 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的全局变量只针对一个会话中有用,是不是这样???待验证。

  • 相关阅读:
    zju 2886
    zju 2478
    UVA350-水题
    UVA699-落叶-二叉树
    UVA327
    UVA548
    java环境变量
    synchronized关键字
    uva297
    UVA196
  • 原文地址:https://www.cnblogs.com/zhwl/p/3715537.html
Copyright © 2011-2022 走看看