Дополнительный набор исключений.
Код:
EXCEPTION
WHEN UTL_FILE.INVALID_PATH THEN
RAISE_APPLICATION_ERROR(-20100, 'Invalid Path');
WHEN UTL_FILE.INVALID_MODE THEN
RAISE_APPLICATION_ERROR(-20101, 'Invalid Mode');
WHEN UTL_FILE.INVALID_OPERATION THEN
RAISE_APPLICATION_ERROR(-20101, 'Invalid Operation');
WHEN UTL_FILE.INVALID_FILEHANDLE THEN
RAISE_APPLICATION_ERROR(-20300,'Invalid File Handle');
WHEN UTL_FILE.WRITE_ERROR THEN
RAISE_APPLICATION_ERROR(-20301,'Write Error');
WHEN UTL_FILE.INTERNAL_ERROR THEN
RAISE_APPLICATION_ERROR(-20302,'Internal Error');
UTL_FILE работает строго с файлами на сервере.
на созданную Directory не забываем давать права пользователю, от которого будем работать.
до версии 9.2 вместо создания Directory и ссылки на нее при открытии файла, надо указать полный путь:
Код:
fileHandler := UTL_FILE.FOPEN('c:\ora_file\', 'test_file.txt', 'W');
Код:
k_inF := UTL_FILE.FOPEN(k_Dir,k_inN,'r'); -- открываем на чтение. имя файла в переменной k_inN, каталог в k_Dir
k_outF := UTL_FILE.FOPEN(k_Dir,k_outN,'w'); -- открываем на запись
-- читаем файл построчно, пока не кончится
loop
begin
UTL_FILE.GET_LINE(k_inF,cn); -- читаем очередную строку файла
exception
WHEN NO_DATA_FOUND THEN EXIT; -- если больше не читается, то выходим из цикла
end;
-- что-то делаем со строкой, считанной в переменную cn, например пишем в другой файл
UTL_FILE.PUTF(k_outF,cn||'\n');
-- строка сначала пишется в буфер, иногда полезно сразу же буфер скинуть на диск.
-- особенно полезно, если появляются ошибки: видно что последнее смогло правильно записаться.
UTL_FILE.FFLUSH(k_outF); -- сбрасываем буфер на диск.
end loop;