Как я могу усечь данные, чтобы уместить их в поле с помощью SQL * Loader?(ОР-12899) - PullRequest
4 голосов
/ 30 июня 2010

Используя Oracle SQL * Loader, я пытаюсь загрузить столбец переменной длины (lob) в другой базе данных в столбец varchar2 (4000) в Oracle.У нас есть строки намного длиннее 4000 символов, но все согласились с тем, что эти строки могут и должны быть усечены при переносе (мы рассмотрели данные, которые выходят за пределы 4000 символов, это не имеет смысла).Для этого я указал столбец в контрольном файле следующим образом:

COMMENTS CHAR(65535) "SUBSTR(:COMMENTS, 1, 4000)",

Однако SQL * Loader по-прежнему отклоняет любую строку, в которой эта запись длиннее 4000 символов в файле данных:

Запись 6484: отклонено - ошибка таблицы LOG_COMMENT, столбец COMMENTS.ORA-12899: слишком большое значение для столбца COMMENTS (фактическое значение: 11477, максимальное значение: 4000)

Запись 31994: отклонено - ошибка таблицы LOG_COMMENT, столбец COMMENTS.ORA-12899: значение слишком велико для столбца COMMENTS (фактическое значение: 16212, максимальное значение: 4000)

Запись 44063: отклонено - ошибка таблицы LOG_COMMENT, столбец COMMENTS.ORA-12899: слишком большое значение для столбца КОММЕНТАРИИ (фактическое значение: 62433, максимальное значение: 4000)

Я попытался использовать подстроку намного меньшего размера, но все еще получал ту же ошибкуКак я могу изменить свой контрольный файл для усечения строковых данных длиннее 4000 символов в столбце varchar2 (4000)?

Ответы [ 2 ]

1 голос
/ 07 октября 2010

Убедитесь, что ваши ENCODING и Oracle ENCODING не конфликтуют. В этом случае используйте параметр CHARACTERSET при загрузке.

0 голосов
/ 19 февраля 2016

для всех учетных записей

COMMENTS CHAR(65535) "SUBSTR(:COMMENTS, 1, 4000)",

- правильный синтаксис.используя sqlldr 11.2.0.1, он успешно работает для меня вплоть до точки, где столбец входной записи> 4000, где я получаю

ORA-01461: can bind a LONG value only for insert into a LONG column

, если я переключаюсь на загрузку directpath, тогда я получаю ошибку smae.

ORA-12899: value too large for column COMMENTS (actual: 4005, maximum: 4000)

в конце я разделил его на 2 этапа загрузки. Теперь у меня есть промежуточная таблица со столбцом типа CLOB, который я загружаю с помощью

COMMENTS CHAR(2000000000) 

, которыйзатем вставляется в главную таблицу eth с

insert into propertable
select dbms_lob.substr(comments,1,4000)
from staging_table;

надеюсь, что это полезно

...