[ОТВЕТИТЬ]
Опции темы
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, время: 15:30.

Все в прочитанное - Календарь - RSS - - Карта - Вверх 👫 Яндекс.Метрика
Форум сделан на основе vBulletin®
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.