Jag antar att qty
definieras som en varchar2
i my_table
-- annars skulle det inte finnas något syfte med att anropa to_number
. Om det antagandet är korrekt, kommer jag att satsa på att det finns någon annan rad i tabellen där qty
innehåller icke-numeriska data.
SQL är ett uppsättningsbaserat språk så Oracle (eller någon annan databas) är helt fri att utvärdera saker i vilken ordning som helst. Det betyder att Oracle är helt fritt att utvärdera to_number(qty)
uttryck innan du använder id=12345
predikat. Om Oracle råkar stöta på en rad där qty
värdet kan inte konverteras till ett tal, det ger ett fel.
Det är också möjligt att det finns vissa icke-numeriska data i den specifika raden där id = 12345
som råkar inte visas (kontrolltecken till exempel). Du kan kontrollera det genom att köra frågan
SELECT dump(qty, 1016)
FROM my_table
WHERE id = 12345
(om du vill ha decimal snarare än hexadecimal, använd 1010 som den andra parametern för att dump
) och kontrollerar om det finns något oväntat i datan.