Oracle External File and UTF-8 Query
824229Dec 15 2010 — edited Dec 16 2010Hi All,
We are looking for ideas as to why we are encountering an issue with an Oracle external table.
We get the following error when we load a particular file in this table:
ORA-12801: error signaled in parallel query server P000
ORA-29913: error in executing ODCIEXTTABLEFETCH callout
ORA-30653: reject limit reached
ORA-06512: at "SYS.ORACLE_LOADER", line 52
We have narrowed this down to a text field in the file that contains the following text (text obfuscated):
XXXXXXXX ł XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This is nominally 40 characters long, which matches the maximum field size, but it is being rejected because it appears the 'ł' character is causing Oracle to interpret the length as 41 characters instead.
The file is encoded in UTF-8 without the BOM. If I remove a X then the file loads without issue.
We tried this in a new schema we created where we added the same table and used the same file. There was no problem at all.
The oracle database has the following settings:
NLS_CHARACTERSET UTF8
NLS_NCHAR_CHARACTERSET UTF8
NLS_LENGTH_SEMANTICS BYTE
NLS_LANGUAGE AMERICAN
The table is defined as follows:
CREATE TABLE XXXXXXXXXXXXXXXXXXXXXX.XXXXXXXXX_INTERFACE
(
XXXXXXXXXXXXXXXXXXXX VARCHAR2(40 CHAR),
XXXXXXXXXX VARCHAR2(40 CHAR),
XXXXXXXXXXXXXXXXX VARCHAR2(40 CHAR),
XXXXXXXXXXXXX VARCHAR2(40 CHAR),
XXXXXXXXXXXXXXXXXXXXX NUMBER(13),
XXXXXXXXXXXX VARCHAR2(40 CHAR)
)
ORGANIZATION EXTERNAL
( TYPE ORACLE_LOADER
DEFAULT DIRECTORY XXXXXXXXXXXXXXXX_L
ACCESS PARAMETERS
( RECORDS DELIMITED BY NEWLINE
BADFILE XXXXXXXXXXXXXXXX_L:'customer.bad'
NOLOGFILE
FIELDS TERMINATED BY"\t" LRTRIM MISSING FIELD VALUES ARE NULL
)
LOCATION (XXXXXXXXXXXXXXXX_L:'external.dat')
)
REJECT LIMIT 0
PARALLEL ( DEGREE 4 INSTANCES 1 )
NOMONITORING;
We tried adding the following attributes but they did not seem to make any difference:
CHARACTERSET UTF8
STRING SIZES ARE IN CHARACTERS
Any assistance would be much appreciated.
Thanks,
Michael