[Ora] ORA-01722: Ungültige Zahl

Pascal

Benutzer
Beiträge
12
Hallo zusammen,

wenn im Abfragefeld :free der Wert '0.0' steht, erhalte ich folgende Fehlermeldung ORA-01722: Ungültige Zahl

case when coalesce(cast(:free as float),0)>0 then 1 else 2 end

Hat hier jemand eine clevere Idee wie ich das lösen könnte?



Mit freundlichen Grüßen
 
Werbung:
Da muss was anderes drin stehen. Mit '0.0' hat cast keine Probleme soweit ich das sehe. Vielleicht steht ein (oder mehrere) Leerzeichen drin?

 
folgende Fehlermeldung ORA-01722: Ungültige Zahl
Ein deutsches System? (Wegen deutscher Fehlermeldung)
Vielleicht sind die numeric separators irgendwie geändert worden, spätestens innerhalb der Session.
(Entscheidend ist, was in der Session aktiv ist, wo es her kommt, wäre eine andere Frage)

Du kannst es abfragen:
Code:
select * from nls_session_parameters
where parameter='NLS_NUMERIC_CHARACTERS';

Damit Deine abfrage funktioniert, müssten Numeric Characters auf
Code:
'.,'
stehen.

Falls sie das nicht tun, kannst Du es (innerhalb der session) ändern
Code:
alter session  set NLS_NUMERIC_CHARACTERS= '.,';
Danach müsste cast auf '0.0' funktionieren, sofern genau diese Einstellung das Problem war (und es ein reines '0.0' an Cast übergeben wird).

Wenn Dir nicht klar ist, was das alles ist, schau dir die NLS Settings genau an, auch den Unterschied von Session und Database Parameters.
Wenn es mit "alter session.." funktioniert, sei Dir bewusst, dass Du damit das Systemverhalten Deiner Sitzung geändert hast. Das ist nur dann unterschiedlich, wenn danach die Sitzung beendet wird oder wenn Du allen Code überprüft und getestet hast, der innerhalb der Sitzung folgt.
 
Ah richtig, an die NLS Settings habe ich gar nicht gedacht.

Wenn man das unabhängig von den aktuellen NLS Einstellungen machen will, könnte man auch to_number() anstatt cast verwenden:

Code:
to_number(:free, '99999999d999', 'NLS_NUMERIC_CHARACTERS = '',.'' ')

Nachteil davon ist, dass man ein Format (mit der maximale Anzahl von Dezimalstellen) angeben muss.
 
Werbung:
Das ist nur dann unterschiedlich, wenn danach die Sitzung beendet wird oder wenn Du allen Code überprüft und getestet hast, der innerhalb der Sitzung folgt.
Ich wollte schreiben,.. Das ist nur dann unerheblich...

Es kann im weiteren sitzungsverlauf zu Problemen führen, wenn es nicht berücksichtigt / zurückgestellt wird.
 
Zurück
Oben