If you have multibyte characters in your file then it is not WE8ISO8859P9.
Which tool did you use to view the file?
Have you tried using CHARACTERSET UTF8 ?
Yes, I tried CHARACTERSET UTF8 and also CHARACTERSET UTF8 LENGTH SEMANTICS CHAR but none of these worked.
Unfortunately the POSITION paramter ignores the LENGTH SEMANTICS setting:
To specify the position of a field in the logical record, use the
POSITIONclause in the column specification. The position may either be stated explicitly or relative to the preceding field. Arguments to
POSITIONmust be enclosed in parentheses. The start, end, and integer values are always in bytes, even if character-length semantics are used for a data file.
However you can alternatively specify the length of your character fields as CHAR(<length>):
Here is an example:
CREATE TABLE ldr_test ( COLUMN1 VARCHAR2(10 char) , COLUMN2 VARCHAR2(10 char) );
Controlfile ldr_test.ctl (save as UTF-8):
LOAD DATA CHARACTERSET UTF8 LENGTH SEMANTICS CHARACTER INFILE * APPEND INTO TABLE ldr_test ( COLUMN1 CHAR(10), COLUMN2 CHAR(10) ) BEGINDATA abcd€efghi1234567890
sqlldr cormaco/cormaco@pdb1 control=ldr_test.ctl