Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
SQL, PL/SQL, T-SQL: запросы, DML DDL операторы, пакеты, процедуры, функции, триггеры и последовательности.
  • Страница:
  • 1
  • 2
  • 3
  • 4

ТЕМА: из clob в файл

из clob в файл 08 авг 2011 04:26 #2999

  • qwer
  • qwer аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 21
  • Спасибо получено: 0
Есть таблица
create table a
(id number,
text clob);
В поле text записана строка:
4tqer
agaehg
44444444444.... ~22mb
нужно загрузить её в файл .txt
вот скрипт программы:
create or replace procedure clobs2file(
                  p_dir  IN VARCHAR2,
                  p_file       IN VARCHAR2) AS
   f_file     utl_file.file_type;
   c_clob     CLOB;
    buff   VARCHAR2(32767);
    offset NUMBER := 1;    
        
 BEGIN
 
 f_file     := utl_file.fopen(p_dir, p_file, 'w',32767);
 
SELECT text INTO c_clob FROM A where id=1;
                  
                  LOOP
                     buff :=dbms_lob.substr(c_clob,32767,offset);
                     EXIT WHEN buff IS NULL;
                     EXIT WHEN length(buff) = 0;
                     offset      := offset + length(buff);
                     utl_file.put(f_file, buff);
                     utl_file.fflush(f_file);
                  END LOOP;
                  
                  
                  utl_file.fclose(f_file);

END;

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: из clob в файл 08 авг 2011 04:30 #3000

  • qwer
  • qwer аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 21
  • Спасибо получено: 0
Проблема в том что она записывает только первые две строчки:
4tqer
agaehg
Oracle 10r2

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: из clob в файл 08 авг 2011 04:52 #3001

  • nic
  • nic аватар
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 17
  • Спасибо получено: 0
buff VARCHAR2(32767);
EXIT WHEN length(buff) = 0
Жесть

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: из clob в файл 08 авг 2011 04:53 #3002

  • Vek
  • Vek аватар
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 10
  • Спасибо получено: 0
CREATE OR REPLACE PROCEDURE WRITE_CLOB (l_clob      IN CLOB,
                                           l_file_dir  IN VARCHAR2,
                                           l_file_name IN VARCHAR2)
IS
  l_file      UTL_FILE.FILE_TYPE;
  l_buffer    VARCHAR2(32767);
  l_amount    BINARY_INTEGER := 32767;
  l_pos       INTEGER := 1;
  l_clob_len  INTEGER;
BEGIN
  l_clob_len := DBMS_LOB.getlength(l_clob);

  l_file := UTL_FILE.fopen(l_file_dir, l_file_name, 'w', 32767);

  WHILE l_pos < l_clob_len LOOP
    DBMS_LOB.read(l_clob, l_amount, l_pos, l_buffer);
    UTL_FILE.put(l_file, l_buffer);
    UTL_FILE.fflush(l_file);
    l_pos := l_pos + l_amount;
  END LOOP;

  UTL_FILE.fclose(l_file);

EXCEPTION
  WHEN OTHERS THEN
    IF UTL_FILE.is_open(l_file) THEN
       UTL_FILE.fclose(l_file);
    END IF;
    RAISE;
END;

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: из clob в файл 08 авг 2011 05:39 #3003

  • qwer
  • qwer аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 21
  • Спасибо получено: 0
Error report:
ORA-29285: ошибка при записи файла
ORA-06512: на "SYS.UTL_FILE", line 77
ORA-06512: на "SYS.UTL_FILE", line 690
ORA-06512: на "usr.WRITE_CLOB", line 27
ORA-29285: ошибка при записи файла
ORA-06512: на line 6
29285. 00000 - "file write error"
*Cause: Failed to write to, flush, or close a file.
*Action: Verify that the file exists, that it is accessible, and that
it is open in write or append mode.
Опять ошибка
Дериктория есть, grant read, write on directory и сам файл тоже есть.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: из clob в файл 08 авг 2011 05:43 #3004

  • Vek
  • Vek аватар
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 10
  • Спасибо получено: 0
Временно убери часть EXCEPTION и посмотри какая там ошибка на самом деле.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Страница:
  • 1
  • 2
  • 3
  • 4