Невозможно проанализировать файл CRLF в Oracle - PullRequest
0 голосов
/ 11 декабря 2018

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

Нижевыход

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

enter image description here

1 Ответ

0 голосов
/ 11 декабря 2018

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

rtrim(sbLine,chr(13))
...