имя каталога слишком длинное pl/sql

Я попытался создать файл с помощью команды Oracle UTL_FILE.FOPEN, но получаю эту ошибку. Есть ли альтернатива?

log_file:=UTL_FILE.FOPEN("P:\Documentation\Project Team\SA\CSR_Documentation\SHR-10500",'outputforDeleteStudentGroup.txt', 'W');

Я не хочу говорить о создании или замене каталога, потому что каталог уже существует.

Пожалуйста, предложите.

Спасибо, Шрирам


person sriram    schedule 21.03.2012    source источник


Ответы (1)


CREATE OR REPLACE DIRECTORY не создает каталог на уровне операционной системы. Он создает объект каталога Oracle. Вы хотите создать объект каталога Oracle, указывающий на каталог на уровне операционной системы. Потенциально вы могли бы пойти с очень старомодным подходом изменения параметра инициализации UTL_FILE_DIR, чтобы включить P:\Documentation\Project Team\SA\CSR_Documentation\SHR-10500 и перезагрузить базу данных, но я бы не рекомендовал это.

Первый параметр UTL_FILE.FOPEN должен быть строкой, что означает, что он должен быть заключен в одинарные, а не в двойные кавычки.

Существует ли диск P:\ в файловой системе сервера базы данных? Или это сетевой диск, который монтируется сервером базы данных? Или это каталог, доступный клиенту?

person Justin Cave    schedule 21.03.2012
comment
Это в сети и в том же месте, откуда я прочитал свой сценарий sql. Эй, также, когда я даю одинарные кавычки, он говорит, что неверный путь. Почему я не могу получить доступ к файлу и идее? - person sriram; 21.03.2012
comment
@sriram - вы можете использовать только физические пути, а не объекты каталога Oracle в UTL_FILE, если путь указан в параметре UTL_FILE_DIR вашей базы данных. Но UTL_FILE_DIR устарел в пользу использования объектов каталога Oracle. Я все еще не уверен, что вы говорите, что P:` drive is mounted on the database server's file system or if it is just something that is mounted by the client. UTL_FILE` не может ссылаться на каталоги, доступные для файловой системы клиента, только на те, которые являются частью файловой системы сервера. - person Justin Cave; 21.03.2012
comment
@Dave Есть ли какая-нибудь команда, с помощью которой я узнаю, где находится файловая система серверов баз данных. Что вы подразумеваете под установленным клиентом? извините, я новичок в оракуле. - person sriram; 21.03.2012
comment
@sriram — файловая система сервера базы данных — это набор каталогов, которые видны операционной системе на сервере, на котором установлен Oracle. Это не имеет ничего общего с Оракулом. Есть ли у вас учетная запись операционной системы на сервере(ах), на котором работает Oracle? - person Justin Cave; 21.03.2012
comment
@Dave Он подключен к клиенту в Windows. Нет, у меня нет входа в операционную систему на серверы. - person sriram; 21.03.2012
comment
@sriram - UTL_FILE, как и весь код PL/SQL, работает на сервере базы данных. Он может получить доступ только к файлам, доступным на сервере базы данных. Он не может получить доступ к файлам, которые просто доступны для клиентской машины. - person Justin Cave; 21.03.2012