Вашите номера не са ограничени. С едноцифрени (положителни) числа ти знайте, че свързаната дължина може да бъде само три, но виртуалната колона трябва да е достатъчно голяма за всяко число - така че изглежда, че позволява до 40 цифри за имплицитния формат на модела (38 значещи цифри, десетичен разделител и знак; лексикализацията на @collspar ).
Като каза това, ограничаването на числовата колона няма да бъде отразено в дължината на виртуалната колона - правейки и двете колони NUMBER(1,0)
все още оставя конкатенацията, изискваща 81 знака. Вземането на подниза на генерираната стойност също няма да работи
, в този случай получавайки ORA-12899: value too large for column "TEXT" (actual: 10, maximum: 40)
. Предоставяне на модел на формат за всеки to_char()
обаждане, напр. от FM999
), ще работи, но ограничава стойностите от двете страни на долната черта, а не цялата дължина директно.
Ако искате да ограничите размера на колоната, можете да я прехвърлите към същия тип данни и размер, което е по-ясно:
text VARCHAR2(10) generated always as
(cast(to_char(id)||'_'||to_char(num) as VARCHAR2(10))) VIRTUAL