任何人都可以帮我解决这个特殊的错误。我在hindi中有一个单独的文件名,我正在创建一个外部目录。外部目录创建的命令完成没有任何错误,但是当我查询表时它会抛出以下错误
An error occurred when executing the SQL command:
select * from EXT_TABLE_13868
ORA-29913: error in executing ODCIEXTTABLEOPEN callout
ORA-29400: data cartridge error
KUP-04040: file येश.txt.tmp in EXTDIR_13868 not found [SQL State=99999, DB Errorcode=29913]
外部表创建脚本
CREATE TABLE EXT_TABLE_13868(cols..)
ORGANIZATION EXTERNAL (
TYPE ORACLE_LOADER
DEFAULT DIRECTORY EXTDIR_13868
ACCESS PARAMETERS (
RECORDS DELIMITED BY '\r\r\n' CHARACTERSET 'UTF16'
BADFILE EXTDIR_13868:'BAD.txt.bad'
LOGFILE EXTDIR_13868:'LOG.txt.log'
FIELDS TERMINATED BY '|' OPTIONALLY ENCLOSED BY '"'
MISSING FIELD VALUES ARE NULL)
LOCATION ('येश.txt.tmp')
)REJECT LIMIT 0
数据库字符集
PARAMETER VALUE
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CHARACTERSET AL32UTF8
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY $
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_RDBMS_VERSION 11.2.0.2.0
请注意,如果文件名保存在ANSI中,那么即使文件内容具有单一编码数据,相同的过程也不会有任何问题。这是导致问题的unicode文件名。
答案 0 :(得分:0)
有趣的问题。我无法重现:
create directory test_dct
as
'...'
/
create table test_table
( a varchar2(2000)
)
organization external
( type oracle_loader
default directory test_dct
access parameters
( records delimited by ',' characterset 'AL32UTF8'
badfile test_dct:'test.bad'
logfile test_dct:'test.log'
fields terminated by '|'
optionally enclosed by '"'
missing field values are null
)
location ('येश.tmp')
)
reject limit 0
/
在档案中有:
a,b,c,d,e,f
这会整齐地返回6行:
select *
from test_table
/
适用于Linux上的11.2.0.3 SE1。您在Windows XP / 7和XE上运行11.2.0.2。差异可以是配置,网络,软件或操作系统。
我在v $ nls_parameters中的配置对于nls_characterset和nls_length_semantics是相同的(这不太可能导致问题,但有时Oracle的内核开发人员就像人一样,他们选择了错误的配置设置)。我不认为配置问题是原因。
网络不是问题,因为在这种情况下,Oracle网络驱动程序不会在任何地方使用。所以映射不适用。
软件版本几乎相同(11.2.0.2和11.2.0.3)。我在网络中的任何地方都没有11.2.0.2,我记得在11.2.0.2和11.2.0.3之间我注意到的唯一区别是dbms_metadata包有缺陷并且解决了一些小的调优问题。 11.1的初始版本对于特定查询有一些主要的Unicode错误,但在11.2中没有类似的错误。所以我不认为这是原因。
版本XE和SE1不完全相同,但我不希望它出现问题。 Oracle Corp.需要维护一大块软件,并尽可能地共享代码。
最佳候选者是操作系统(或更好地说:操作系统和Oracle之间的关系)。
建议采取的行动: