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

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
 
S

SlaterB

Gast
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?
 
T

timboy1390

Gast
Also,

er gibt mir erst eine fehlermeldung ab dem 500 Eintrag.

to_number() gibt leider keine Hilfe.
 
S

SlaterB

Gast
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?
 
T

timboy1390

Gast
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 :-/
 
S

SlaterB

Gast
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
 
T

timboy1390

Gast
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.
 

Ähnliche Java Themen


Oben