Twoje liczby nie są ograniczone. Z jednocyfrowymi (dodatnimi) liczbami ty wiem, że połączona długość może wynosić tylko trzy, ale wirtualna kolumna musi być wystarczająco duża dla dowolnej liczby - więc wygląda na to, że dopuszcza do 40 cyfr dla niejawnego modelu formatu (38 cyfr znaczących, separator dziesiętny i znak; leksykalizacja @collspar ).
To powiedziawszy, ograniczenie kolumny liczbowej nie będzie odzwierciedlone w długości wirtualnej kolumny — obie kolumny będą NUMBER(1,0)
nadal pozostawia konkatenację wymagającą 81 znaków. Pobranie podłańcucha wygenerowanej wartości także nie zadziała
, w tym przypadku pobranie ORA-12899: value too large for column "TEXT" (actual: 10, maximum: 40)
. Dostarczanie modelu formatu dla każdej to_char()
zadzwoń np. z FM999
), zadziała, ale ogranicza wartości po obu stronach podkreślenia, a nie bezpośrednio w całkowitej długości.
Jeśli chcesz ograniczyć rozmiar kolumny, możesz rzutować ją na ten sam typ i rozmiar danych, co jest bardziej jednoznaczne:
text VARCHAR2(10) generated always as
(cast(to_char(id)||'_'||to_char(num) as VARCHAR2(10))) VIRTUAL