NLS_NUMERIC_CHARACTERS Einstellung für Dezimalstellen
Ich habe eine db-setup in einer test-Maschine und die zweite in der Produktion Maschinen. Wenn ich laufen:
select to_number('100,12') from dual
Dann gibt es Fehler in der test-Maschine. Jedoch, diese Anweisung funktioniert Recht gut, in der Produktion Maschine.
Nun, wenn ich überprüfen, für NLS_NUMERIC_CHARACTERS dann sehe ich ',' (Komma) in die Maschine. Gibt es irgendwo anders ich suchen sollte, für die dezimal-Einstellung?
Prost!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie Ihre aktuelle session-Einstellungen durch die Abfrage
nls_session_parameters
:Abweichen können, aus der Datenbank, was voreingestellt ist, können Sie sehen, in
nls_database_parameters
.In dieser Sitzung Ihre Abfrage-Fehler:
Ich ändern könnte meine session, die entweder direkt mit
alter session
oder indem sichergestellt wird mein client ist so konfiguriert, dass führt zu der Einstellung, die die Zeichenfolge muss (es kann sein, geerbt von einem Betriebssystem oder Java-locale, zum Beispiel):In SQL-Entwickler können Sie stellen Sie den gewünschten Wert in Werkzeug->Einstellungen->Datenbank->NLS.
Aber ich kann Sie auch außer Kraft setzen, dass die session-Einstellung als Teil der Abfrage, mit der optionalen Dritten nlsparam parameter
to_number()
; obwohl, das macht das optionale zweite fmt parameter notwendig, ebenso, so müssten Sie in der Lage sein wählen Sie eine geeignete format:Standardmäßig das Ergebnis wird immer noch angezeigt mit der session-Einstellungen, so dass das Dezimaltrennzeichen ist immer noch ein Zeitraum.
Jaanna, die Sitzung Parameter in Oracle SQL Developer sind abhängig von Ihren client-computer, während die NLS Parameter auf PL/SQL ist vom server.
Beispielsweise die
NLS_NUMERIC_CHARACTERS
auf client-computer kann ',.' während es '.,' auf server.So, wenn Sie script ausführen aus PL/SQL und Oracle SQL Developer der dezimal-separator kann dabei völlig unterschiedlich sein, für das gleiche script, es sei denn, Sie alter session mit Ihr erwartet
NLS_NUMERIC_CHARACTERS
im Skript.Einen Weg, um leicht testen Sie Ihre session-parameter ist zu tun:
Wissen-SITZUNG Dezimaltrennzeichen verwenden, können Sie folgenden SQL-Befehl:
Den ersten SELECT-Befehl finden NLS-Parameter definiert in
NLS_SESSION_PARAMETERS
Tabelle. Das Dezimaltrennzeichen ist das erste Zeichen im zurückgegebenen Wert.Dem zweiten SELECT-Befehl konvertieren IMPLIZIT die
0.5
rationale Zahl in einen String mit (standardmäßig) NLS_NUMERIC_CHARACTERS definiert, auf session-Ebene.Den beiden Befehl return gleichen Wert.
Habe ich schon getestet, der gleiche SQL-Befehl in PL/SQL-Skript und das ist immer der gleiche Wert KOMMA oder PUNKT angezeigt wird. Dezimaltrennzeichen angezeigt in PL/SQL-Skript ist gleich was angezeigt wird, ist in SQL.
Testen, was ich sage, ich habe folgende SQL-Befehle:
Den kürzeren Befehl, um zu wissen, Dezimaltrennzeichen ist:
Zurückgeben
0,5
wenn Dezimaltrennzeichen ist ein KOMMA und die0.5
wenn Dezimaltrennzeichen ist ein PUNKT.Beste Weg ist,
```
). Für inline-code in der gleichen Zeile als nicht-code, surround-code mit einem einzigen backtick auf jeder Seite (`
).