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