Вставка данных в Oracle

Я пытаюсь перенести БД из Informix в Oracle. У Informix была опция, например, при вставке в таблицу, если размер значения превышает длину столбца, тогда Informix автоматически обрезает данные. Но Oracle не поддерживает это и всегда выдает исключение .Есть ли способ предотвратить и разрешить обрезку или мы должны уважать религиозно?


person Harish    schedule 02.03.2011    source источник


Ответы (3)


В Oracle нет автоматической обрезки данных, вы должны сами обрезать их, например.

insert into mytable (id, text) values (123, substr(var,1,4000));
person Tony Andrews    schedule 02.03.2011

Oracle поддерживает различные функции SQL, которые обрезают переменные. Я подозреваю, что вам понадобится «SUBSTR()». Проблема в том, что вам нужно будет явно указать желаемую длину. В этом примере T23.WHATEVER предполагается равным VARCHAR2(30), а T24.TOO_LONG_COLUMN, э-э, длиннее:

insert into t23
  (id
    , whatever)
select pk_col
       , substr(too_long_col, 1, 30)
from t42
/
person APC    schedule 02.03.2011

Как и предложение Тони, вы можете использовать CAST

select cast ('1234' as varchar2(3)) a
from dual

Если вы выполняете миграцию данных, загляните в Журнал ошибок DML.

Помещение всех ваших несоответствующих данных в соответствующую таблицу с указанием причины сбоя — это просто мечта.

person Gary Myers    schedule 02.03.2011