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

Nomor Oracle dan varchar bergabung

Salah satu alasan mengapa konversi implisit gagal adalah ketika kolom varchar bergabung berisi data yang bukan numerik. Oracle menangani nomor ke varchar2 bergabung dengan mengonversi string (lihat kutipan Gary di komentarnya), jadi itu benar-benar mengeksekusi ini:

select a.col1, b.somecol 
from tableA a inner join tableB b on to_number(b.col2)=a.col1;

Jika tableB.col2 berisi nilai-nilai yang bukan numerik - tampaknya sangat mungkin, itu adalah string - maka itu akan melemparkan ORA-01722: invalid number . Dengan secara eksplisit mentransmisikan kolom angka ke string, Anda memutus perilaku default Oracle.

Fakta bahwa Anda tidak mendapatkan masalah ini di dua lingkungan pertama Anda adalah masalah keberuntungan bukan konfigurasi. Itu bisa menyerang kapan saja, karena hanya membutuhkan satu string non-numerik untuk memecahkan kueri. Jadi benar-benar Anda harus menjalankan dengan konversi eksplisit di semua lingkungan.

Untuk performa, Anda dapat membuat indeks berbasis fungsi ...

create index whatever_idx on tableA ( to_char(col1) )
/ 



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hibernasi, id, oracle, urutan

  2. Kriteria Hibernasi untuk Tanggal

  3. NUMTODSINTERVAL di PostgreSQL

  4. Cara Menampilkan Semua Keistimewaan Database Oracle untuk Pengguna

  5. Bagaimana cara memformat kueri Oracle saya sehingga kolom tidak terbungkus?