Jeg antager, at qty
er defineret som en varchar2
i my_table
-- ellers ville der ikke være noget formål ved at kalde to_number
. Hvis den antagelse er korrekt, vil jeg vædde på, at der er en anden række i tabellen, hvor qty
indeholder ikke-numeriske data.
SQL er et sæt-baseret sprog, så Oracle (eller enhver anden database) er helt fri til at evaluere ting i den rækkefølge, det finder passende. Det betyder, at Oracle er helt fri til at evaluere to_number(qty)
udtryk, før du anvender id=12345
prædikat. Hvis Oracle tilfældigvis støder på en række, hvor qty
værdi kan ikke konverteres til et tal, vil det give en fejl.
Det er også muligt, at der er nogle ikke-numeriske data i den bestemte række, hvor id = 12345
der tilfældigvis ikke vises (f.eks. kontroltegn). Du kan kontrollere det ved at køre forespørgslen
SELECT dump(qty, 1016)
FROM my_table
WHERE id = 12345
(hvis du vil have decimal i stedet for hexadecimal, skal du bruge 1010 som den anden parameter til at dump
) og tjekker, om der er noget uventet i dataene.