Я получаю файл фиксированного формата из устаревшего приложения, который ежедневно загружается в таблицу 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. Буду признателен за любую оказанную помощь. Мысли о других способах достижения вышеупомянутого требования также приветствуются. ТИА