Опитвам се да мигрирам DB от Informix към Oracle. Informix имаше опция като при вмъкване в таблица, ако размерът на стойността надвишава дължината на колоната, тогава Informix автоматично изрязва данните. Но Oracle не поддържа това и винаги хвърля изключение .Има ли начин да предотвратим и позволим подстригване или трябва да уважаваме религиозно?
Вмъкване на данни в Oracle
Отговори (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