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

TO_CHAR(angka) Fungsi mengembalikan ORA-01722:nomor tidak valid

Saya berasumsi bahwa qty didefinisikan sebagai varchar2 di my_table -- jika tidak, tidak akan ada gunanya memanggil to_number . Jika asumsi itu benar, saya akan bertaruh bahwa ada beberapa baris lain dalam tabel di mana qty memiliki data non-numerik di dalamnya.

SQL adalah bahasa berbasis set sehingga Oracle (atau basis data lainnya) benar-benar bebas untuk mengevaluasi berbagai hal dalam urutan apa pun yang dianggap cocok. Itu berarti Oracle benar-benar bebas untuk mengevaluasi to_number(qty) ekspresi sebelum menerapkan id=12345 predikat. Jika Oracle kebetulan menemukan baris di mana qty nilai tidak dapat dikonversi ke angka, itu akan menimbulkan kesalahan.

Mungkin juga ada beberapa data non-numerik di baris tertentu di mana id = 12345 yang kebetulan tidak ditampilkan (karakter kontrol misalnya). Anda dapat memeriksanya dengan menjalankan kueri

SELECT dump(qty, 1016) 
  FROM my_table
 WHERE id = 12345

(jika Anda menginginkan desimal daripada heksadesimal, gunakan 1010 sebagai parameter kedua untuk dump ) dan memeriksa untuk melihat apakah ada sesuatu yang tidak terduga dalam data.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. cx_Oracle:distutils.errors.DistutilsSetupError:tidak dapat menemukan Oracle termasuk file

  2. Oracle 11 Index hanya untuk sebagian data

  3. Kesulitan SQL JOIN - sepertinya perlu cara membatasi baris dalam kondisi bergabung

  4. Konversi stempel waktu di Oracle untuk format YYYY-MM-DD HH:MM:SS

  5. Memesan string sambil menggabungkan di oracle