如何动态更改PL/SQL包中的全局变量的值?

Bee*_*Dog 1 oracle parameters plsql path

在我们的Oracle数据库中的一个PL/SQL包中,有一个全局变量g_file_path,它指向系统上将存储某些文件的位置:

create or replace
PACKAGE xyz_package
AS

...

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

...
Run Code Online (Sandbox Code Playgroud)

此变量用于整个包中的各种UTL_FILE操作.

不幸的是,选择的路径是不合适的,我需要弄清楚如何根据数据库运行的环境动态设置路径,例如路径变为/ opt/ENVDB/xyz,其中ENVDB根据env而变化.

一个想法是模拟shell脚本的行为:

>echo $XYZ_DB_TOP
Run Code Online (Sandbox Code Playgroud)

这指向可以存储文件的合适文件夹.我想不出一个合适的PL/SQL函数来模拟这种行为.这个问题的任何智能/简单解决方案?任何帮助表示赞赏!

APC*_*APC 8

如果您使用的是Oracle 9i或更高版本,则应使用目录对象.这更安全,因为它只允许完整路径(没有通配符).与init.ora文件中的UTL_FILE_DIR不同,它也不需要重新启动数据库.它更安全,因为我们可以将特定个人用户的每个目录授予权限.

但是现在最让您感兴趣的方面是目录对象的抽象使得它可以改变实际的OS路径,因此在每个环境中它可以是不同的.像这样:

alter directory temp_data as '/home/oracle/tmp';
Run Code Online (Sandbox Code Playgroud)

了解更多.