Невозможно проанализировать файл CRLF в Oracle

Я пытаюсь прочитать файл, отправленный внешней системой на наш сервер, и загрузить его в таблицу базы данных оракула. Я использую пакет utl_file для чтения данных из файла. Когда я создаю файл с аналогичным содержимым в среде unix, он читается с помощью моего кода оракула, но он не работает с файлом, который мы получаем из внешней системы. При исследовании я обнаружил, что файл, отправляемый внешней системой, имеет текст типа ISO-8859, с разделителями строк CRLF, тогда как файл, который я создал в среде unix, имеет текст Unicode типа UTF-8.

Ниже приведен вывод

select * from sys.v_$parameter
where name like 'nls_lang%'

1 ответ

Поскольку Unix-подобные используют только 1 (один) символ для END-OF-LINE (LINE-FEED с кодом 10 ascii), и файл имеет 2 (два) символа для END-OF-LINE (CARRIAGE_RETURN с кодом 13 ascii и следующим LINE-FEED с кодом 10 ascii), каждая строка, читаемая UTL_FILE.GET_LINE, имеет в качестве последнего символа символ CARRIAGE-RETURN (ascii 13).
Вам нужно RTRIM этот последний символ.
Например, каждая строка читается в переменной "sbLine", а затем используйте ее для удаления последней

rtrim(sbLine,chr(13))
Другие вопросы по тегам