Как динамически изменить значение глобальной переменной в пакете PL / SQL? - PullRequest
1 голос
/ 22 марта 2012

В одном из пакетов PL / SQL в нашей базе данных Oracle есть глобальная переменная g_file_path, которая указывает на место в системе, где будут храниться определенные файлы:

create or replace
PACKAGE xyz_package
AS

...

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

...

Эта переменнаяиспользуется в различных операциях UTL_FILE во всем пакете.

К сожалению, выбранный путь неадекватен, и мне нужно выяснить, как динамически задавать путь в зависимости от среды, в которой работает база данных, например, чтобы путь стал/ opt / ENVDB / xyz, где ENVDB изменяется в зависимости от env.

Одной из идей является эмуляция поведения сценария оболочки:

>echo $XYZ_DB_TOP

Это указывает на подходящую папку, гдефайлы могут быть сохранены.Я не могу придумать подходящую функцию PL / SQL, которая имитирует это поведение.Любое умное / простое решение этой проблемы?Любая помощь приветствуется!

1 Ответ

8 голосов
/ 22 марта 2012

Если вы используете Oracle 9i или выше, вы должны вместо этого использовать объект каталога.Это безопаснее, поскольку разрешает только полные пути (без подстановочных знаков).Это также не требует перезапуска базы данных, в отличие от использования UTL_FILE_DIR в файле init.ora.И это гораздо более безопасно, потому что мы можем предоставлять привилегии для каждого каталога конкретным отдельным пользователям.

Но аспект, который вас сейчас больше всего заинтересует, заключается в том, что абстракция объекта каталога делает его надежнымизменить фактический путь ОС, чтобы он мог быть различным в каждой среде.Вот так:

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

Узнайте больше .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...