Nomor Anda tidak dibatasi. Dengan satu digit angka (positif) Anda tahu panjang gabungan hanya bisa tiga, tetapi kolom virtual harus cukup besar untuk angka apa pun - jadi sepertinya memungkinkan hingga 40 digit untuk model format implisit (38 digit signifikan, pemisah desimal, dan tanda; leksikalisasi @collspar ).
Karena itu, membatasi kolom angka tidak akan tercermin dalam panjang kolom virtual - menjadikan kedua kolom NUMBER(1,0)
masih meninggalkan rangkaian yang membutuhkan 81 karakter. Mengambil substring dari nilai yang dihasilkan juga tidak akan berfungsi
, dalam hal ini mendapatkan ORA-12899: value too large for column "TEXT" (actual: 10, maximum: 40)
. Menyediakan model format untuk setiap to_char()
panggilan, mis. dari FM999
), akan berfungsi tetapi membatasi nilai di kedua sisi garis bawah daripada panjang keseluruhan secara langsung.
Jika Anda ingin membatasi ukuran kolom, Anda dapat mentransmisikannya ke tipe dan ukuran data yang sama, yang lebih eksplisit:
text VARCHAR2(10) generated always as
(cast(to_char(id)||'_'||to_char(num) as VARCHAR2(10))) VIRTUAL