Вмъкване на данни в Oracle

Опитвам се да мигрирам DB от 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