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.