0

我必须通过 oracle 数据库中的 sql loader 加载数据。在控制文件 FIELDS TERMINATED BY中提及。sql 加载程序无法将 pilcrow 识别为分隔符。

像这样的数据

HDR¶name¶Id
BDY¶rohan¶2
TRL¶1
4

2 回答 2

0

S_Sauden 给出的例子也适用于我。

首先尝试在 ctl 文件中使用十六进制值:

Fields terminated by X'C2B6'

您可以使用以下查询查找 hex_value 以供参考:

select rawtohex( utl_raw.cast_to_raw( '¶' ) ) from dual;

如果上述想法对您不起作用,那么您可以检查您尝试上传的文件的编码:

 file -i datafile

上面的命令用于linux获取字符集 [编码]。您可以在ctl文件中使用以下信息sqlldr

load data
CHARACTERSET UTF8
infile 

同步 DB、File、Loader 的字符集很重要,以确保您在翻译过程中不会丢失任何数据。

下面的查询为您提供了有关您的 Oracle 数据库环境的信息:

SELECT * FROM V$NLS_PARAMETERS

此外,您应该确保您的操作系统环境具有正确的 NLS_LANG 环境变量集。如果没有设置,那么请做必要的事情。您可以使用下面的参考链接获取完整指南。

export NLS_LANG=[NLS_LANGUAGE]_[NLS_TERRITORY].[NLS_CHARACTERSET]
For example: American_America.UTF8

参考链接

请检查链接以获取有关字符集重要性的一些理解和参考。

于 2017-12-22T09:40:42.177 回答
0

试试这个:它可能会帮助你。

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

这个对我有用。

于 2017-12-21T19:17:39.467 回答