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.