Замена fnd_file на utl_file для входа в plsql

Мой код пакета содержит fnd_file.put_line для ведения журнала. Мне нужно заменить это на utl_file.put_line, что будет минимальным количеством строк кода, которые я должен написать. в моем коде более 100 вхождений fnd_file.put_line для 14 процедур. Объясните, пожалуйста, в чем разница между utl_file и fnd_file? и дайте мне пример кода.

Мой вопрос:

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

PS: я вижу, что этот пакет является частью параллельного программирования. Является ли utl_file областью действия?


person Mahi    schedule 25.07.2017    source источник


Ответы (1)


FND_FILE.PUT_LINE будет печатать строку в вашем выводе или файле LOG, когда вы запускаете параллельную программу.

FND_FILE.PUT_LINE(FND_FILE.output, 'message'); -- This will print in Concurrent program output
FND_FILE.PUT_LINE(FND_FILE.log, 'message'); -- This will print in Concurrent program log

UTL_FILE.PUT_LINE напечатает строку в доступном для записи файле, который вам нужно открыть в вашем pl-sql.

Пример использования UTL_FILE

v_chr_out_file       UTL_FILE.file_type;
v_chr_out_file :=
            UTL_FILE.fopen (<directory_path>,
                            <file_name>,
                            'W',
                            32767);
UTL_FILE.put_line (v_chr_out_file, 'this will get written in file');
UTL_FILE.fclose (v_chr_out_file);
person Sudipta Mondal    schedule 25.07.2017
comment
что такое 32767 в UTL_FILE.fopen(‹directory_path›, ‹file_name›, 'W', 32767); - person Mahi; 25.07.2017
comment
Я вижу, что этот пакет является частью параллельного программирования. Является ли utl_file областью действия для ведения журнала. - person Mahi; 25.07.2017
comment
@Mahi - 32767 - это максимальный размер строки, который можно напечатать в каждой строке. Конечно, UTL_FILE можно использовать из любого пакета PL/SQL, который вызывается параллельной программой. - person Sudipta Mondal; 25.07.2017
comment
Не могли бы вы объяснить, если код находится на сервере, то как указать местоположение каталога. Он также будет включать информацию о сервере. Поясните пожалуйста на примере. - person Mahi; 26.07.2017
comment
@Mahi - это не ваш первоначальный вопрос, и я не уверен, что вы спрашиваете. - person Sudipta Mondal; 26.07.2017
comment
См. для целей проекта, этот код должен быть запущен... так что определенно он будет храниться на каком-то сервере... поэтому мой вопрос заключается в том, как указать местоположение каталога, если файл находится на каком-то удаленном сервере... на локальной машине Я могу указать, например, C:\ для диска c ... но если это удаленная машина, то как указать местоположение каталога utl. - person Mahi; 26.07.2017
comment
Путь к каталогу необходимо добавить в таблицу dba_directory. Это то, к чему имеют доступ только администраторы базы данных. dba_directory есть поле для directory_name. вам нужно будет вставить в таблицу одну запись типа 'somepathname', '/path/to/file/'. тогда вы можете использовать somepathname в своем параметре UTL_FILE.fopen - person Sudipta Mondal; 26.07.2017
comment
Я получаю сообщение об ошибке ниже для объявления объявления ------------------ file1 UTL_FILE.FILE_TYPE; *****ошибка*** ››› ОШИБКА, строка 40, столбец 10, конечная_строка 40, конечная_колонка 17, найден 'UTL_FILE', ожидается: ; -или- .. := ПО УМОЛЧАНИЮ НЕ NULL -или- % -или- ( . @ - person Mahi; 26.07.2017
comment
как utl_file будет записывать логи во временный файл. у нас нет конкретного имени временного файла. он должен создать временный файл, а затем записать в него. - person Mahi; 26.07.2017