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的全域性變數只針對乙個會話中有用,是不是這樣???待驗證。
Oracle資料庫程式包全域性變數的應用
1 前言 在程式實現過程中,經常用遇到一些全域性變數或常數。在程式開發過程中,往往會將該變數或常數儲存於臨時表或前台程式的全域性變數中,由此帶來執行效率降低 頻繁讀取臨時表 或安全隱患 存於前台程式變數,可跟蹤記憶體變數獲得 本文主要論述將全域性變數或常數訪問程式包的優點和實現方法。2 優點 2.1...
Oracle資料庫中的程式包練習
1.在乙個包中定義兩個過載的方法,兩個方法作用都是求乙個數到另乙個數的和並將和返回,方法申明如下 包頭 create orreplace package pack1 asfunction getsum endnumber int return int function getsum endnumbe...
oracle中的程式包
一 程式包的基本概念 程式包可將若干函式或者儲存過程組織起來,作為乙個物件進行儲存。程式包通常由兩部分構成,規範 specification 和主體 body 程式報也可以包含常量和變數,包中的所有函式和儲存過程都可以使用這些變數或者常量。二 規範 1 建立規範 sql視窗 create or re...