powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / UTL_FILE.put и fflush ограничивает файл 32k
16 сообщений из 16, страница 1 из 1
UTL_FILE.put и fflush ограничивает файл 32k
    #39736696
LVV5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Комбинация UTL_FILE.put и следом fflush ограничивает файл 32k. Вопрос почему?
UTL_FILE.put_line использовать в моем случае нельзя, так как в конец строки буфера добавляются свои настроенные пользователем ограничители. Как обойти обрезку файла до 32k?
...
Рейтинг: 0 / 0
UTL_FILE.put и fflush ограничивает файл 32k
    #39736707
LVV5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как я поняла, fflush здесь не работает, так как у меня нет разделителя строк.
По документации
"The data must be terminated with a newline character."
...
Рейтинг: 0 / 0
UTL_FILE.put и fflush ограничивает файл 32k
    #39736733
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LVV5Комбинация UTL_FILE.put и следом fflush ограничивает файл 32k. Вопрос почему?Ты что-то спутала.
LVV5так как в конец строки буфера добавляются свои настроенные пользователем ограничителиС нетекстовыми файлами нужно работать нетектстовыми процедурами.
...
Рейтинг: 0 / 0
UTL_FILE.put и fflush ограничивает файл 32k
    #39736787
LVV5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic,

Код: plsql
1.
2.
utl_file.put(v_file_handle, v_text_data || v_Separator); 
utl_file.fflush(v_file_handle);    



v_Separator cейчас задан, как \x0D\x0A, соответственно переведенный в chr.

Я переписала уже на
Код: plsql
1.
 utl_file.put_raw(v_file_handle, UTL_RAW.CAST_TO_RAW(v_text_data || v_Rec_Separator), TRUE); 


и всё работает. Файл записан полностью.

Просто сам вопрос, почему utl_file.put не воспринимает заданный сепаратор строки?
...
Рейтинг: 0 / 0
UTL_FILE.put и fflush ограничивает файл 32k
    #39736792
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LVV5Просто сам вопрос, почему utl_file.put не воспринимает заданный сепаратор строки?А какой воспринимает?
...
Рейтинг: 0 / 0
UTL_FILE.put и fflush ограничивает файл 32k
    #39736804
LVV5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-,

не тестировала. Вопрос, почему не сработал первый вариант, если указан fflush, а файл обрывается.
Может есть какие-то настройки БД, связанные с процедурой fflush? Может параметр не указан где-либо?
...
Рейтинг: 0 / 0
UTL_FILE.put и fflush ограничивает файл 32k
    #39736809
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LVV5не тестироваладостаточно задуматься о чем вопрос.

LVV5файл обрываетсякуда?
...
Рейтинг: 0 / 0
UTL_FILE.put и fflush ограничивает файл 32k
    #39736811
LVV5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я пока понять не могу, у меня даже первый вариант нормально сейчас отработал. А у клиента обрываются файлы в середине строки на 32Kb.
...
Рейтинг: 0 / 0
UTL_FILE.put и fflush ограничивает файл 32k
    #39737048
LVV5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LVV5
Код: plsql
1.
2.
utl_file.put(v_file_handle, v_text_data || v_Separator); 
utl_file.fflush(v_file_handle);    



v_Separator cейчас задан, как \x0D\x0A, соответственно переведенный в chr.

Я переписала уже на
Код: plsql
1.
 utl_file.put_raw(v_file_handle, UTL_RAW.CAST_TO_RAW(v_text_data || v_Separator), TRUE); 


и всё работает. Файл записан полностью.



Вопросы снимаются. Работают оба варианта и fflush после put, и put_raw.
Моё недоумение вызвало, почему первый вариант с fflush не сработал, а он оказывается работал, просто поступила дезинформация от другого источника)))
...
Рейтинг: 0 / 0
UTL_FILE.put и fflush ограничивает файл 32k
    #39737050
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LVV5просто поступила дезинформация от другого источника)))
YouTube Video
...
Рейтинг: 0 / 0
UTL_FILE.put и fflush ограничивает файл 32k
    #39737619
flexgen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LVV5 Как обойти обрезку файла до 32k?

Использовать DBMS_XSLPROCESSOR.CLOB2FILE
...
Рейтинг: 0 / 0
UTL_FILE.put и fflush ограничивает файл 32k
    #39737645
Maxim Demenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
flexgen,

Ну да, канешна, принципиально новая технология, ну этот utl_file нафик
clob2file
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
PROCEDURE CLOB2FILE(CL CLOB, FLOCATION VARCHAR2, FNAME VARCHAR2,
                    CSID IN NUMBER := 0) IS
   FP UTL_FILE.FILE_TYPE;
   TEMPBUF RAW(32767);
   AMOUNT INTEGER;
   OFFSET INTEGER;
   CHARSET VARCHAR2(50);
   TEMPBLOB  BLOB;
   SRC     NUMBER := 1;
   DST     NUMBER := 1;
   LANG    NUMBER := 0;
   WARN    NUMBER;
BEGIN
   
   IF (CSID <> 0) THEN
     CHARSET := NLS_CHARSET_NAME(CSID);
     IF (CHARSET IS NULL) THEN
       RAISE_APPLICATION_ERROR (-20000, 'unsupported charset id ' || CSID); 
       RETURN;
     END IF;
   END IF;

   FP := UTL_FILE.FOPEN(FLOCATION, FNAME, 'wb', 32767);

   AMOUNT := DBMS_LOB.GETLENGTH(CL);

   DBMS_LOB.CREATETEMPORARY(TEMPBLOB,TRUE,DBMS_LOB.SESSION);

   
   DBMS_LOB.CONVERTTOBLOB(TEMPBLOB, CL, AMOUNT, DST, SRC, CSID, LANG, WARN); 

   OFFSET := 1;
   LOOP
      BEGIN
         AMOUNT := 32767;
         DBMS_LOB.READ(TEMPBLOB, AMOUNT, OFFSET, TEMPBUF); 
           
         UTL_FILE.PUT_RAW(FP, TEMPBUF);
         UTL_FILE.FFLUSH(FP);
         EXIT WHEN (AMOUNT < 32767);
         OFFSET := OFFSET + AMOUNT;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
           EXIT;
      END;
   END LOOP;
   UTL_FILE.FCLOSE(FP);
   DBMS_LOB.FREETEMPORARY(TEMPBLOB);			  
END CLOB2FILE;



Regards
...
Рейтинг: 0 / 0
UTL_FILE.put и fflush ограничивает файл 32k
    #39737713
flexgen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Demenkoflexgen,

Ну да, канешна, принципиально новая технология, ну этот utl_file нафик

Regards

Это ты сказал, не я :-). Просто иногда вместо того чтобы изобретать велосипед нужно просто задуматься о том, что наверняка проблема стоящая перед тобой, была уже кем-то решена. И почитать документацию.
...
Рейтинг: 0 / 0
UTL_FILE.put и fflush ограничивает файл 32k
    #39737721
Maxim Demenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
flexgen,

Попытаюсь перефразировать твой совет . Для того чтобы обойти (несуществующую) проблему обрезки файла utl_file до 32к надо использовать dbms_xslprocessor.clob2file (который использует utl_file). Не забывая при этом что (несуществующая) проблема была кем-то решена.
Я правильно понял ?

Regards
...
Рейтинг: 0 / 0
UTL_FILE.put и fflush ограничивает файл 32k
    #39737725
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Demenko надо использовать dbms_xslprocessor.clob2file (который использует utl_file).С 12.2 применение clob2file выглядит более гармоничным, и на фоне этого ваять код с utl_file становится архаизмом.
...
Рейтинг: 0 / 0
UTL_FILE.put и fflush ограничивает файл 32k
    #39737740
Maxim Demenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-,

Я не вижу причин не использовать dbms_lob.clob2file особенно если исходные данные представлены clob (если же их надо конструировать на лету только чтобы сделать соответствующими api - то как минимум было бы неплохо протестировать производительность и сравнить с utl_file), но я так же не вижу преимуществ использования dbms_xslprocessor.clob2file в контексте вопроса заданного ТС, а архаичность это понятие довольно субъективное - для некоторых и 12.2 слишком бета, лет пять еще подождут ...

Regards
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / UTL_FILE.put и fflush ограничивает файл 32k
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]