在我们的Oracle数据库的一个PL / SQL包中,有一个全局变量g_file_path,它指向系统中存储某些文件的位置:
create or replace
PACKAGE xyz_package
AS
...
g_file_path VARCHAR2 (80) := '/usr/tmp';
...
此变量用于整个包中的各种UTL_FILE操作。
不幸的是,选择的路径不足,我需要弄清楚如何根据数据库运行的环境动态设置路径,例如:所以路径变为/ opt / ENVDB / xyz,其中ENVDB根据环境而变化。
一个想法是模拟shell脚本的行为:
>echo $XYZ_DB_TOP
指向可存储文件的合适文件夹。我想不出一个合适的PL / SQL函数来模拟这种行为。这个问题的任何智能/简单解决方案?任何帮助表示赞赏!
答案 0 :(得分:8)
如果您使用的是Oracle 9i或更高版本,则应使用目录对象。这更安全,因为它只允许完整路径(没有通配符)。与init.ora文件中的UTL_FILE_DIR不同,它也不需要重新启动数据库。而且它更安全,因为我们可以将每个目录的权限授予特定的个人用户。
但是现在最让您感兴趣的方面是目录对象的抽象使得它可以改变实际的OS路径,因此在每个环境中它可以是不同的。就像这样:
alter directory temp_data as '/home/oracle/tmp';