未使用 SQLLDR 加载带有字段分隔符 ^A 的二进制文件

未使用 SQLLDR 加载带有字段分隔符 ^A 的二进制文件

我正在尝试使用 SQLLDR 将 .dat 文件上传到 Oracle DB。文件数据列由“^A”分隔。文件字符集是二进制的。

bash-4.4$ file -i /tmp/t_details_all_data_20240209.dat
/tmp/t_details_all_data_20240209.dat: application/octet-stream; charset=binary

这是我的 CTL 文件

LOAD DATA
APPEND
INTO TABLE DETAILS_TEMP
FIELDS TERMINATED BY '^A'
OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
IS_ID "decode(trim(:ISSUE_ID),null,0,to_number(trim(:IS_ID)))",
IS_NAME CHAR(1500) "trim(:IS_NAME)",
IS_STATUS "trim(:IS_STATUS)",
is_no_days_draft_status FILLER,....

但是当我运行脚本时,数据没有加载,第一列被读取为完整的行,无法识别字段分隔符。和/或 SQLLDR 中的错​​误是“记录 1:被拒绝 - 表 DETAILS_TEMP、列 IS_ID 出错。数据文件中的字段超出最大长度”。

当我在 Notepad++ 中打开此文件时,字段分隔符显示为“SOH”。当我这样做时cat /tmp/t_details_all_data_20240209.dat,它没有显示任何内容作为字段分隔符。

我尝试使用“字符串”将文件转换为 UTF-8/ASCII:

strings /tmp/t_details_all_data_20240209.dat > /tmp/t_details_all_data_20240209_tmp.txt

但所有列都是它生成的文件中的新行。

转换后的文件: cat /tmp/t_details_all_data_20240209_tmp.txt:

IS ID
IS Name
IS Status...

命令

od -tc < /tmp/t_details_all_data_20240209.dat

报告

i   s   _   i   d 001   i   s   _   n  a   m   e 001   i   s
_   s   t   a   t   u   s 001 

确认字段分隔符是字节值为001的字符。

由于安全限制,我无法上传用于加载数据的文件。但我可以提供更多细节。

相关内容