01.04.2012 20:46
OlegON
 
Код:
rem -----------------------------------------------------------------------
rem Filename:   utlfile.sql
rem Purpose:    Demonstrate writing to a file using the UTL_FILE package
rem Date:       28-Aug-1998
rem Author:     Frank Naude, Oracle FAQ
rem -----------------------------------------------------------------------

CREATE DIRECTORY test_dir AS 'c:\';
-- CREATE DIRECTORY test_dir AS '/tmp';

DECLARE
  fileHandler UTL_FILE.FILE_TYPE;
BEGIN
  fileHandler := UTL_FILE.FOPEN('test_dir', 'test_file.txt', 'W');
  UTL_FILE.PUTF(fileHandler, 'Look ma, I''m writing to a file!!!\n');
  UTL_FILE.FCLOSE(fileHandler);
EXCEPTION
  WHEN utl_file.invalid_path THEN
     raise_application_error(-20000, 'ERROR: Invalid path for file.');
END;
/
02.04.2012 12:28
akonev
 
Дополнительный набор исключений.
Код:
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;
14.11.2013 08:56
whitewizard
 
Не работает, хоть ты тресни (Оракл 11)
Пишет про "Invalid path" и ни в какую не хочет загружать.
14.11.2013 09:05
OlegON
 
Кто не работает-то? Откуда, как?
14.11.2013 09:12
whitewizard
 
Невовремя интернет отвалился (не могу пока срипт показать).
Задача стоит в том, чтобы прочитать из текстового файла данные.
Всё просто, сделано по инструкции. Должно, по идее, работать.
14.11.2013 10:29
OlegON
 
Ждем кода :) Где-то накосячил.
14.11.2013 10:37
whitewizard
 
Процедура компилится, то есть написано всё верно.
А вот когда я её запускаю, типа exec PROC(папка, файл), оно сваливается в ошибку.
14.11.2013 10:42
OlegON
 
Если в строковой переменной написано неверно, то компилиться будет все равно.
14.11.2013 13:47
whitewizard
 
Код:
CREATE OR REPLACE procedure readfile (dir in varchar2, fil in varchar2) is
cn varchar2(25);
v_file UTL_FILE.FILE_TYPE;

BEGIN
  v_file := UTL_FILE.FOPEN(dir,fil,'r');
  LOOP
      begin
        UTL_FILE.GET_LINE(v_file,cn); 
        dbms_output.put_line(cn);
      exception
        WHEN NO_DATA_FOUND THEN EXIT; 
      end;
  end loop;
  UTL_FILE.FCLOSE(v_file);
EXCEPTION
  WHEN utl_file.invalid_path THEN
     raise_application_error(-20000, 'ERROR: Invalid path for file.');
END;
/
14.11.2013 14:15
OlegON
 
Елки-палки :) Скопипасть тогда уж все, как у тебя в SQL Plus, вместе с вызовом...
Часовой пояс GMT +3, время: 17:22.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.