2016-05-24 6 views
0

С моим следующим PLSQL-блоком, я испытываю символ Line Feed в конце файла. Мое предположение заключается в том, что линии не будет.UTL_FILE добавляет LF к концу файла

DECLARE 
    v_MyFileHandle UTL_FILE.FILE_TYPE; 
    BEGIN 
     v_MyFileHandle := UTL_FILE.FOPEN('MY_DIREC','HELLO.TXT','a'); 
     UTL_FILE.PUT(v_MyFileHandle, '1'); 
     UTL_FILE.FCLOSE(v_MyFileHandle); 
END; 

выше блок выводит файл, который выглядит как:

1 [LF]

DECLARE 
    v_MyFileHandle UTL_FILE.FILE_TYPE; 
    BEGIN 
     v_MyFileHandle := UTL_FILE.FOPEN('MY_DIREC','HELLO.TXT','a'); 
     UTL_FILE.PUT(v_MyFileHandle, '1'); 
     UTL_FILE.PUT(v_MyFileHandle, '2'); 
     UTL_FILE.FCLOSE(v_MyFileHandle); 
END; 

выше блок будет производить файл, который выглядит как:

12 [LF]

Как предотвратить подачу строки в конце файла?

+0

Какая операционная система? Если вы делаете 'FFLUSH', а затем помещаете свою программу в длинный цикл без закрытия файла, что у него есть файл? –

ответ

1

Попробуйте DBMS_XSLPROCESSOR.CLOB2FILE как обходной путь. Он не создает [LF] в Unix и [CR] [LF] в Windows в конце файла.

DECLARE 
    v_myClob CLOB := '1'; 
    BEGIN 
    DBMS_XSLPROCESSOR.CLOB2FILE(v_myClob, 'MY_DIREC', 'HELLO.TXT');  
END; 
0

После обширного поиска в Google, я обнаружил, что это работает с использованием «wb» для байтового режима и put_raw.

sBufToWrite := 'line1' || chr(13) || chr(10) || line2' || chr(13) || chr(10) || 'line3'; 
sFileName := 'testfile.txt'; 
out_file := utl_file.fopen('DATA_DIRECTORY', sFileName, 'wb'); 
utl_file.put_raw(out_file, utl_raw.cast_to_raw(sBufToWrite)); 
utl_file.fclose(out_file); 
Смежные вопросы