sql >> Database >  >> RDS >> Oracle

Het aaneenschakelen van getallen in virtuele kolomexpressie genereert ORA-12899:waarde te groot voor kolom

Uw aantallen zijn niet beperkt. Met enkelcijferige (positieve) cijfers jij weet dat de aaneengeschakelde lengte slechts drie kan zijn, maar de virtuele kolom moet groot genoeg zijn voor elk getal - dus het lijkt erop dat het tot 40 cijfers toestaat voor het impliciete formaatmodel (38 significante cijfers, het decimaalteken en het teken; @collspar's lexicalisering ).

Dat gezegd hebbende, zou het beperken van de nummerkolom niet worden weerspiegeld in de virtuele kolomlengte - waardoor beide kolommen NUMBER(1,0) worden laat nog steeds de aaneenschakeling die 81 tekens vereist. Het nemen van de subtekenreeks van de gegenereerde waarde werkt ook niet , in dit geval krijg je ORA-12899: value too large for column "TEXT" (actual: 10, maximum: 40) . Een formaatmodel leveren voor elke to_char() bellen, bijv. van FM999 ), zou werken, maar beperkt de waarden aan weerszijden van het onderstrepingsteken in plaats van de totale lengte rechtstreeks.

Als u de kolomgrootte wilt beperken, kunt u deze casten naar hetzelfde gegevenstype en dezelfde grootte, wat explicieter is:

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



  1. Is het mogelijk voor Oracle sqlldr om een ​​TNS-vermelding te accepteren als instantiekwalificatie in Oracle 10 en 11?

  2. Een DATE-veld gebruiken als primaire sleutel van een datumdimensie met MySQL

  3. Oracle - huidige datum opmaken

  4. Fout bij het verbinden met Oracle. Een UnfinishedLinkError krijgen voor de methode t2cGetCharSet