2012-03-22 105 views
1

在我們的Oracle數據庫中的PL/SQL包一個,有一個全局變量,g_file_path,指向系統上的位置,其中的某些文件將被存儲:如何動態更改PL/SQL包中全局變量的值?

create or replace 
PACKAGE xyz_package 
AS 

... 

    g_file_path  VARCHAR2 (80) := '/usr/tmp'; 

... 

此變量在不同的使用整個包中的UTL_FILE操作。

不幸的是,所選擇的路徑是不夠的,我需要想出如何動態地設置的路徑取決於該數據庫運行的環境,例如所以路徑變爲/ opt/ENVDB/xyz,其中ENVDB根據env而變化。

一個想法是模仿shell腳本的行爲:

>echo $XYZ_DB_TOP 

指向哪裏可以將文件存儲在適當的文件夾中。我想不出一個合適的PL/SQL函數來模擬這種行爲。任何聰明/簡單的解決這個問題?任何幫助表示讚賞!

回答

8

如果您正在使用Oracle 9i,或更高,你應該使用目錄對象,而不是。這樣更安全,因爲它只允許完整的路徑(沒有通配符)。與使用init.ora文件中的UTL_FILE_DIR不同,它不需要重新啓動數據庫。而且它更安全,因爲我們可以將每個目錄的權限授予特定的個人用戶。

但是,將你感興趣的方面最右邊的是現在的目錄對象的抽象使得不在話下改變實際操作系統的路徑,因此它可以在每個環境不同。就像這樣:

alter directory temp_data as '/home/oracle/tmp'; 

Find out more