Dine tal er ikke begrænset. Med enkeltcifrede (positive) tal du ved, at den sammenkædede længde kun kan være tre, men den virtuelle kolonne skal være stor nok til ethvert tal - så det ser ud til, at det tillader op til 40 cifre for den implicitte formatmodel (38 signifikante cifre, decimalseparatoren og tegnet; @collspars leksikalisering ).
Når det er sagt, vil begrænsning af talkolonnen ikke blive afspejlet i den virtuelle kolonnelængde - hvilket gør begge kolonner NUMBER(1,0)
efterlader stadig sammenkædningen, der kræver 81 tegn. At tage understrengen af den genererede værdi virker heller ikke
, i dette tilfælde får ORA-12899: value too large for column "TEXT" (actual: 10, maximum: 40)
. Levering af en formatmodel for hver to_char()
ring, f.eks. af FM999
), ville fungere, men begrænser værdierne på begge sider af understregningen i stedet for den samlede længde direkte.
Hvis du vil begrænse kolonnestørrelsen, kan du caste den til samme datatype og størrelse, hvilket er mere eksplicit:
text VARCHAR2(10) generated always as
(cast(to_char(id)||'_'||to_char(num) as VARCHAR2(10))) VIRTUAL