Oracle
 sql >> база данни >  >> RDS >> Oracle

UTL_FILE.WRITE_ERROR при извикване на utl_file.put в цикъл

  1. Публикувайте версията на Oracle, която използвате! Или можем просто да гадаем...

  2. Вашият fflush няма да работи както очаквате - От документацията :

    FFLUSH записва физически чакащи данни във файла, идентифициран от манипулатора на файла. Обикновено данните, които се записват във файл, се буферират. Процедурата FFLUSH принуждава буферираните данни да бъдат записани във файла. Данните трябва да завършват със знак за нов ред.

  3. tbone е абсолютно прав редът TO_CHAR(10) е грешен! Просто опитайте SELECT TO_CHAR(10) FROM DUAL; ще получите 10 които след това сравнявате с един знак. Единичен знак никога няма да бъде '10', тъй като 10 има два знака!

  4. Вашият проблем най-вероятно е препълване на буфера с твърде големи XML-файлове, но имайте предвид, че и други проблеми в целевата система могат да доведат до write_errors, които трябва да бъдат обработени.

Решения

  • Бързо и мръсно :Тъй като така или иначе изглежда не ви интересува производителността, можете просто да затворите файла на всеки X байт и да го отворите отново с A за добавяне. Така че просто добавете към цикъла:

    IF MOD( l_offset, 32000 ) = 0
    THEN
      UTL_FILE.FCLOSE( f_out );
      UTL_FILE.FOPEN( out_fpath, out_fname, f_out, 'a', 32767 );
    END IF;
    
  • Използвайте правилния инструмент за правилната работа:UTL_FILE не е подходящ за работа със сложни данни. Единственият случай на използване на UTL_FILE са малки редове текст, разделени с нов ред. За всичко останало трябва да пишете RAW байтове! (Което също така ще ви позволи да контролирате porper върху КОДИРАНЕТО, което в момента е просто мини-ванилно-щастливо предположение)

  • Напишете Java-Stored-Procedure с NIO-Filechannels - бързо, безопасно, приятно... Но бъдете внимателни, вашата програма може да работи 10 пъти по-бързо!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Разбиране на Lob сегменти (SYS_LOB) в oracle?

  2. oracle как да променя таблица добавяне на дял по диапазон интервал

  3. Използване на Babel в производството - Как да компилираме предварително скриптове

  4. Каква е разликата между схемата на Oracle и Microsoft?

  5. База данни на Oracle:Как да четем BLOB?