Oracle PLSQL - ORA-01722 (invalid number) - Was nun

  • Themenstarter Themenstarter timboy1390
  • Beginndatum Beginndatum
T

timboy1390

Gast
Hallo,

ich habe in PL/SQL eine Abfrage gebaut.

Er gibt die Fehlermeldung aus bei einer Case abfrage.

SQL:
CASE WHEN v16.method='Relativ'
THEN (cv.fixed_power*v16.price)
else v16.price+1
END as Handelsgebühr[/JSQL]

Price ist vom Datentyp "VARCHAR2(4000)" und es sind nur Zahlen bei "v16.price".

V16 besteht aus einem left join:
[code=sql]left join (select unique **_id, cost_type, method, type, price from *****
where cost_type='Handelsgebühr') V16 on V16.****_id=cv.id

Habe gedacht, dass iwo n Text vorkommt, dass ist aber nicht so.

Die Fehlermeldung kommt hier:else v16.price+1


weiß jemand was ich jetzt machen kann, damit es wieder funktioniert?

lg
 
es gibt auch to_number() in Oracle, aber ich glaube die wird dann letztlich gleichen Fehler liefern,

vielleicht hilft es, die Tabelle einzeln durchzugehen, liefert
[c]select v16.price+1 from V16 where id = 1[/c]
bereits einen Fehler?
hoffentlich nicht bzw. diesen Eintrag dann anschauen

liefert
[c]select v16.price+1 from V16 [/c]
aber durchaus einen Fehler?

dann ist meine Vermutung, dass doch irgendein Eintrag nicht passt,
per Java könnte man wohl alle Einträge näher untersuchen oder lauter Anfragen für jede Id einzeln stellen bis zum Fehler,

ansonsten gibt es auch noch die Intervallhalbierung, wenn die Ids von 1 bis 1000 gehen,
dann
[c]select v16.price+1 from V16 where id >= 1 and id <= 500[/c]

evtl. liege ich aber auch falsch und die Fehlermeldung kommt bei jeder Teilabfrage,
eine Variante wäre auch noch zunächst alle Einträge aus der Tabelle zu löschen und nach und nach wieder einzufügen

-------

der ganze Inhalt meines Posting setzt jedenfalls darauf auf dass du dich bei
> und es sind nur Zahlen bei "v16.price".
irrst, wenn nicht dann Pech für mich, und bisschen für dich mit Lesen 😉

vielleicht Leerzeichen übersehen?
 
Also,

er gibt mir erst eine fehlermeldung ab dem 500 Eintrag.

to_number() gibt leider keine Hilfe.
 
wie jetzt, immer wenn eine Query 500 Einträge enthält oder genau bei einem bestimmten?
schau den doch genauer an? geht es weiter wenn du den ausklammerst?
 
Nein, ich habe die gleichen Abfragen noch mit v12, v13, v14, v15...

Und die laufen bis 4987 Einträge wie gewollt.

Sobald ich v16 hinzufüge bleibt er halt bei 500 stehen und dann kommt die fehlermeldung.

Habe mal geguckt was bei dem 490-510 Einträgen steht aber da scheint alles in Ordnung zu sein.

unbenannt7ghuj06l8r.jpg



Das ich echt verrückt :-/
 
mit diesem 'laufen bis/ bleibt stehen' kann ich persönlich gar nichts anfangen,
ist ja schön und gut wenn du einen bestimmten Punkt gefunden hast,
aber dann bitte den einzeln abfragen,

geht, wie schon vorgeschlagen, und angepasst
[c]select v16.price+1 from V16 where id = 500[/c]
bzw. wie auch immer passend zum Eintrag, oder nicht?

und wie gesagt dann als Text in Java laden und analysieren, wie lang ist der Text, sind Leerzeichen enthalten, geht Double.parseDouble() usw.?
arbeiten, nicht nur wundern
 
Habe auch mal ein

SQL:
where v16.***_id <> '***'

reingehauen, damit er den Datensatz 500 nicht nimmt. Aber danach kommt die Meldung bei 900.
Dann mache ich das gleiche mit 900 und danach kommt es bei 600 usw.
 

Zurück
Oben