sql >> Databasteknik >  >> RDS >> Oracle

Sammankoppling av tal i virtuellt kolumnuttryck ger ORA-12899:värde för stort för kolumn

Dina siffror är inte begränsade. Med ensiffriga (positiva) nummer du vet att den sammanlänkade längden bara kan vara tre, men den virtuella kolumnen måste vara tillräckligt stor för vilket tal som helst - så det ser ut som att det tillåter upp till 40 siffror för den implicita formatmodellen (38 signifikanta siffror, decimalavgränsaren och tecknet; @collspars lexikalisering ).

Med det sagt, att begränsa nummerkolumnen skulle inte återspeglas i den virtuella kolumnlängden - vilket gör båda kolumnerna NUMBER(1,0) lämnar fortfarande sammankopplingen som kräver 81 tecken. Att ta delsträngen för det genererade värdet fungerar inte heller , i det här fallet får ORA-12899: value too large for column "TEXT" (actual: 10, maximum: 40) . Ange en formatmodell för varje to_char() ring, t.ex. av FM999 ), skulle fungera men begränsar värdena på vardera sidan av understrecket snarare än den totala längden direkt.

Om du vill begränsa kolumnstorleken kan du casta den till samma datatyp och storlek, vilket är mer explicit:

text VARCHAR2(10) generated always as 
    (cast(to_char(id)||'_'||to_char(num) as VARCHAR2(10))) VIRTUAL



  1. Hur man använder NHibernate med både MySQL-server och Microsoft SQL-server 2008

  2. Hur man formaterar pengar i PostgreSQL

  3. Utveckla PostgreSQL för Windows, del 1

  4. Oracle SQL-fel:ORA-00923:Från nyckelord hittades inte där det förväntades