Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / UTL_FILE.put и fflush ограничивает файл 32k / 16 сообщений из 16, страница 1 из 1
22.11.2018, 12:25
    #39736696
LVV5
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UTL_FILE.put и fflush ограничивает файл 32k
Добрый день.
Комбинация UTL_FILE.put и следом fflush ограничивает файл 32k. Вопрос почему?
UTL_FILE.put_line использовать в моем случае нельзя, так как в конец строки буфера добавляются свои настроенные пользователем ограничители. Как обойти обрезку файла до 32k?
...
Рейтинг: 0 / 0
22.11.2018, 12:35
    #39736707
LVV5
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UTL_FILE.put и fflush ограничивает файл 32k
Как я поняла, fflush здесь не работает, так как у меня нет разделителя строк.
По документации
"The data must be terminated with a newline character."
...
Рейтинг: 0 / 0
22.11.2018, 12:55
    #39736733
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UTL_FILE.put и fflush ограничивает файл 32k
LVV5Комбинация UTL_FILE.put и следом fflush ограничивает файл 32k. Вопрос почему?Ты что-то спутала.
LVV5так как в конец строки буфера добавляются свои настроенные пользователем ограничителиС нетекстовыми файлами нужно работать нетектстовыми процедурами.
...
Рейтинг: 0 / 0
22.11.2018, 13:40
    #39736787
LVV5
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UTL_FILE.put и fflush ограничивает файл 32k
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
22.11.2018, 13:47
    #39736792
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UTL_FILE.put и fflush ограничивает файл 32k
LVV5Просто сам вопрос, почему utl_file.put не воспринимает заданный сепаратор строки?А какой воспринимает?
...
Рейтинг: 0 / 0
22.11.2018, 13:58
    #39736804
LVV5
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UTL_FILE.put и fflush ограничивает файл 32k
-2-,

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

LVV5файл обрываетсякуда?
...
Рейтинг: 0 / 0
22.11.2018, 14:10
    #39736811
LVV5
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UTL_FILE.put и fflush ограничивает файл 32k
Я пока понять не могу, у меня даже первый вариант нормально сейчас отработал. А у клиента обрываются файлы в середине строки на 32Kb.
...
Рейтинг: 0 / 0
22.11.2018, 17:59
    #39737048
LVV5
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UTL_FILE.put и fflush ограничивает файл 32k
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
22.11.2018, 18:02
    #39737050
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UTL_FILE.put и fflush ограничивает файл 32k
LVV5просто поступила дезинформация от другого источника)))
YouTube Video
...
Рейтинг: 0 / 0
23.11.2018, 16:51
    #39737619
flexgen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UTL_FILE.put и fflush ограничивает файл 32k
LVV5 Как обойти обрезку файла до 32k?

Использовать DBMS_XSLPROCESSOR.CLOB2FILE
...
Рейтинг: 0 / 0
23.11.2018, 17:39
    #39737645
Maxim Demenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UTL_FILE.put и fflush ограничивает файл 32k
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
23.11.2018, 19:11
    #39737713
flexgen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UTL_FILE.put и fflush ограничивает файл 32k
Maxim Demenkoflexgen,

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

Regards

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

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

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

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

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


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