Я не могу воспроизвести вашу проблему. Я использую Oracle 10.2.0.3.0 с SQL * Loader 10.2.0.1.
Вот мой тестовый пример:
SQL> CREATE TABLE test_sqlldr (
2 ID NUMBER,
3 comments VARCHAR2(20),
4 id2 NUMBER
5 );
Table created
Контрольный файл:
LOAD DATA
INFILE test.data
INTO TABLE test_sqlldr
APPEND
FIELDS TERMINATED BY ';'
TRAILING NULLCOLS
( id,
comments filler,
id2
)
файл данных:
1;aaa;2
3;abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz;4
5;bbb;6
Я использую команду sqlldr userid=xxx/yyy@zzz control=test.ctl
и получаю все строки без ошибок:
SQL> select * from test_sqlldr;
ID COMMENTS ID2
---------- -------------------- ----------
1 2
3 4
5 6
Вы можете попробовать другой подход, я получаю тот же желаемый результат со следующим контрольным файлом:
LOAD DATA
INFILE test.data
INTO TABLE test_sqlldr
APPEND
FIELDS TERMINATED BY ';'
TRAILING NULLCOLS
( id,
comments "substr(:comments,1,0)",
id2
)
Обновление после комментария Роментаза : Я снова посмотрел на него и смог получить ту же ошибку, что и вы, когда размер столбца превысил 255 символов. Это связано с тем, что типом данных SQL * Loader по умолчанию является char (255). Если у вас есть столбец с большим количеством данных, вам придется указать длину. Следующий контрольный файл решил проблему для столбца с 300 символами:
LOAD DATA
INFILE test.data
INTO TABLE test_sqlldr
APPEND
FIELDS TERMINATED BY ';'
TRAILING NULLCOLS
( id,
comments filler char(4000),
id2
)
Надеюсь, это поможет,
-
Винсент