sql >> Database teknologi >  >> RDS >> Oracle

TO_CHAR(tal) Funktion returnerer ORA-01722:ugyldigt tal

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.



  1. 4 måder at vælge duplikerede rækker i PostgreSQL

  2. Forespørgsel i en relationsdatabase gennem Google DataFlow Transformer

  3. Forespørgsel på flere databaser på én gang

  4. SQL Server-markørtyper - Frem kun dynamisk markør | SQL Server Tutorial / TSQL Tutorial