我必须通过oracle数据库中的sql loader加载数据。在控制文件FIELDS TERMINATED由¶
提及。 sql loader无法识别pilcrow作为分隔符。
数据如
HDR¶name¶Id
BDY¶rohan¶2
TRL¶1
试试这个:它可能对你有帮助。
Fields terminated by '¶' optionally enclosed by '"'
演示:首先,我创建了一个表
CREATE TABLE test_table1
(
ID NUMBER,
ENAME VARCHAR2(200),
LNAME VARCHAR2(200)
);
我创建了一个控制文件test.ctl
OPTIONS ( ROWS=5000)
LOAD DATA
INFILE *
BADFILE './test_table1.BAD'
DISCARDFILE './test_table.DSC'
APPEND INTO TABLE test_table1
Fields terminated by '¶' optionally enclosed by '"'
trailing nullcols
(
ID,
ENAME,
LNAME
)BEGINDATA
1¶A¶B
2¶C¶D
从命令提示符运行:
sqlldr control = 'test.ctl' userid = username/password
这个对我有用。
S_Sauden给出的例子也适合我。
最初尝试使用ctl文件中的十六进制值:
Fields terminated by X'C2B6'
您可以使用以下查询来查找hex_value以供参考:
select rawtohex( utl_raw.cast_to_raw( '¶' ) ) from dual;
如果上述想法不适合您,那么您可以检查您尝试上传的文件的编码:
file -i datafile
以上命令适用于linux
以获取charset [编码]。您可以在ctl
文件中使用以下信息来获取sqlldr
:
load data
CHARACTERSET UTF8
infile
重要的是同步DB,File,Loader的字符集,以确保您不会丢失任何翻译数据。
以下查询为您提供有关Oracle DB环境的信息:
SELECT * FROM V$NLS_PARAMETERS
此外,您应确保您的OS环境具有正确的NLS_LANG环境变量集。如果没有设置,那么请做必要的。您可以使用下面的参考链接获取相同的完整指南。
export NLS_LANG=[NLS_LANGUAGE]_[NLS_TERRITORY].[NLS_CHARACTERSET]
For example: American_America.UTF8
参考Link
请查看链接以获得对importance of characterset的一些理解和参考。