Ошибка загрузчика SQL при загрузке файла .txt, который является результатом командлета сравнения объектов - PullRequest
0 голосов
/ 05 июля 2018

Я получаю файл фиксированного формата из устаревшего приложения, который ежедневно загружается в таблицу Oracle с помощью загрузчика SQL. Новое требование требует, чтобы файлы Дня 1 и Дня 2 сравнивались и добавлялась только разница, поэтому данные в конце дня 2 выглядят как День 1 (начальная загрузка) + День 2 - День 1 (только изменения).

Я использую приведенную ниже команду, чтобы узнать разницу между 2 файлами

Compare-Object -referenceObject $ (Get-Content $ File1) -differenceObject $ (Get-Content $ File2) | % {$ .Inputobject + $ .SideIndicator} | ft-auto | out-file $ fileDiff.txt -width 5000

Пример первой строки из объекта сравнения выглядит следующим образом:

4614 TESTUC1 32570544900721657

Контрольный файл читает файл, как показано ниже:

PER_ID POSITION (1: 8) CHAR, ПРЕКРАЩЕННЫЙ ПРОБЕЛОМ,

ПОЛЬЗОВАТЕЛЬ_ID ПОЗИЦИЯ (9:16) CHAR, ПРЕКРАЩЕННЫЙ ПРОБЕЛОМ,

USER_ID_PREV POSITION (17:24) CHAR, ПРЕКРАЩЕННЫЙ ПРОБЕЛОМ,

Журналы дают мне причину ошибки для удаления всех записей следующим образом:

Запись 1: отклонено - ошибка таблицы PDB_EXPORT_DELTA, столбец PER_ID. ORA-01722: неверный номер

Я не уверен, связано ли это с тем, что FileDiff.txt больше не находится в фиксированном формате или SQLLoader больше не распознает его как фиксированный формат.

Я исследовал оба аспекта и ничего не нашел в Compare-Object, сохраняющем или изменяющем формат выходного файла различий, и не видел ничего о значениях приведения типов в управляющем файле SQLLoader. Буду признателен за любую оказанную помощь. Мысли о других способах достижения вышеупомянутого требования также приветствуются. ТИА

1 Ответ

0 голосов
/ 05 июля 2018

Моя версия SQL По умолчанию загрузчик (и, по-видимому, ваш) использует 8-битный набор символов, поэтому вы можете либо A) преобразовать файл в 8-битный, используя Notepad ++ (или эквивалентный), либо B) обновить скрипт PowerShell для создайте файл как 8-битный или C), проверьте использование предложения CHARACTERSET в файле управления SQL Loader.

...