sql >> Database teknologi >  >> RDS >> Oracle

Sammenkædning af tal i virtuelt kolonneudtryk kaster ORA-12899:værdi for stor til kolonne

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



  1. Hvordan man skriver MySql select-sætning for at få alle definerede indstillinger eller standardindstillinger, der ikke tilsidesættes for et id i én sætning

  2. Automatiser sikkerhedskopiering og vedligeholdelsesjob ved hjælp af vedligeholdelsesplan i SQL Server

  3. SQL-forespørgsel til beregning af det samlede antal ordrer pr. dag?

  4. Sådan indsætter du en række data i mysql ved hjælp af php