Předpokládám, že qty
je definován jako varchar2
v my_table
-- jinak by volání to_number
nesplnilo žádný účel . Pokud je tento předpoklad správný, vsadím se, že v tabulce je nějaký další řádek, kde qty
obsahuje nečíselná data.
SQL je jazyk založený na množinách, takže Oracle (nebo jakákoli jiná databáze) může hodnotit věci v jakémkoli pořadí, které uzná za vhodné. To znamená, že Oracle může zcela svobodně vyhodnotit to_number(qty)
výraz před použitím id=12345
predikát. Pokud Oracle náhodou narazí na řádek, kde je qty
hodnotu nelze převést na číslo, vyvolá to chybu.
Je také možné, že v konkrétním řádku, kde id = 12345
jsou nějaké nečíselné údaje které se náhodou nezobrazují (například řídicí znaky). Můžete to zkontrolovat spuštěním dotazu
SELECT dump(qty, 1016)
FROM my_table
WHERE id = 12345
(chcete-li decimální místo hexadecimální, použijte 1010 jako druhý parametr pro dump
) a zkontrolujte, zda v datech není něco neočekávaného.