0

我从遗留应用程序中收到一个固定格式的文件,该文件每天由 SQL 加载器加载到 oracle 表中。新需求需要比较第 1 天和第 2 天的文件,并且只附加差异,因此第 2 天结束时的数据看起来像第 1 天(初始加载)+ 第 2 天 - 第 1 天(仅更改)。

我正在使用下面的命令来找出两个文件之间的区别

比较对象 -referenceObject $(Get-Content $File1) -differenceObject $(Get-Content $File2) | %{$ .Inputobject + $ .SideIndicator} | 英尺-自动 | 输出文件 $fileDiff.txt -width 5000

compare-object 输出的第一行示例如下所示:

第4614章 32570544900721657

控制文件读取 infile 如下:

PER_ID POSITION(1:8) 字符由空白终止,

USER_ID POSITION(9:16) 字符由空白终止,

USER_ID_PREV POSITION(17:24) 字符由空白终止,

日志给了我一个丢弃所有记录的错误原因,如下所示:

记录 1:拒绝 - 表 PDB_EXPORT_DELTA 的 PER_ID 列出错。ORA-01722: 无效号码

我不确定这是否是由于 FileDiff.txt 不再是固定格式,或者 SQLLoader 不再将其识别为固定格式。

我对这两个方面都进行了研究,但没有发现任何关于 Compare-Object 保留或更改输出差异文件格式的内容,也没有看到任何关于 SQLLoader 控制文件中的类型转换值的内容。任何帮助深表感谢。也欢迎对实现上述要求的其他方法进行思考。TIA

4

1 回答 1

0

我的 SQL Loader 版本(显然是您的版本)默认为 8 位字符集,因此您可以 A)使用 Notepad++(或同等版本)将文件转换为 8 位或 B)更新您的 powershell 脚本以将文件创建为 8-位或 C) 检查 SQL加载程序控制文件中 CHARACTERSET 子句的使用。

于 2018-07-05T20:38:34.503 回答