Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Menggabungkan angka dalam ekspresi kolom virtual melempar ORA-12899:nilai terlalu besar untuk kolom

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle ISNULL () Setara

  2. gabungan batin implisit - apakah mereka sama?

  3. Bagaimana cara melewatkan nama skema dan nama tabel sebagai input kemudian mendapatkan ukuran memori dan row_count sebagai output di plsql

  4. Menggunakan GROUP BY dengan XMLCast dan XMLQuery memberikan ORA-22950

  5. Menggunakan Pemicu di Oracle untuk Mencatat perubahan ke Tabel