Zahl-und Datums-format : eine änderung der NLS_SESSION_PARAMETER nicht funktioniert?

Oracle 11.2.0.3.0, APEX 4.1.1.00.23.

Müssen wir Anzeige zahlen in unserer Anwendung mit dem format FM999999999990.000 und Termine mit dem englischen format DD-MON-YYYY.

Selbst wenn die Sprache der Anwendung ändern wird (Französisch, Spanien, etc.), wir müssen immer das format für zahlen (keine Leerzeichen oder Komma für Gruppen-Trennzeichen und einen Punkt für Dezimaltrennzeichen ie. -1254.010) und das Datum (erste 3 Buchstaben des englischen monatsnamens ie. 12-FEB-2012).

Hier sind Globalisierung Attribute wir verwenden (Application Builder -> Application -> Bearbeiten von Globalisierung Attribute) :

  • Anwendung Hauptsprache: Französisch (Frankreich) (fr)
  • Anwendung Sprache Abgeleitet: Sitzung
  • Application Date Format: DD-MON-YYYY

Kann ich nicht verwalten, damit es funktioniert, wie erwartet...
Ich bekomme immer noch zahlen wie -1254,01 und Termine wie 12-FÉVR.-2012 statt -1254.010 und 12-FEB-2012.
Es scheint APEX ignorieren, jeder Aufruf zum alter session...

Ich habe versucht, geben Sie den folgenden code in die "Initialisierung PL/SQL-Code" - Attribut (Application Builder -> Application -> Bearbeiten von Sicherheits-Attribute), aber ohne Erfolg :

BEGIN
   EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_NUMERIC_CHARACTERS= ''.,'' ';
   EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_DATE_LANGUAGE = ''AMERICAN'' ';
   EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_LANGUAGE = ''AMERICAN'' ';
END;

Habe ich einen Bericht mit der folgenden Abfrage, um zu sehen, ob die Parameter ändern sich :

SELECT
  a1.parameter as "Parameter",
  a1.value as "Database value",
  a2.value as "Instance value",
  a3.value as "Session value"
FROM
  nls_database_parameters a1
  LEFT JOIN nls_instance_parameters a2 ON a1.parameter = a2.parameter
  LEFT JOIN nls_session_parameters a3 ON a1.parameter = a3.parameter
ORDER BY
  a1.parameter asc;

Ergebnis:

Zahl-und Datums-format : eine änderung der NLS_SESSION_PARAMETER nicht funktioniert?

Wie Sie sehen ALTER SESSION Anrufe nicht etwas ändern...

Wenn ich versuche ALTER SESSION Anrufe in einem "Vor Header" - Bewerbung-session scheint nicht geändert werden (Bericht zeigen modifizierte Werte), aber ich bekomme immer noch falsche Datums-und Zahlenformat in meine Berichte und Artikel...
Ich habe versucht die "Format Maske" - Attribut des "Zahl-Feld" Elemente, aber es scheint nichts ändern zu...

Nur so kann ich es auf der Arbeit ist zu nennen ALTER SESSION in jeder PL/SQL-Funktion, die ich aufrufen von APEX. Und für die Berichte, die ich verwenden können, die "Number /Date Format" - Spalte Attribut.

FRAGE: gibt es eine Möglichkeit, ich kann das ändern von Nummer und Datum Parameter für die Sitzung, die für die gesamte Anwendung ?


EDIT :

Wenn ich führen Sie die folgenden , Bevor Header-Prozess auf jeder Seite :

BEGIN
   APEX_UTIL.SET_SESSION_LANG('fr');
   EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_NUMERIC_CHARACTERS= ''.,'' ';
   EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_DATE_LANGUAGE = ''AMERICAN'' ';
END;

Bericht zeigt, dass die session wurde geändert :

Zahl-und Datums-format : eine änderung der NLS_SESSION_PARAMETER nicht funktioniert?

Dann habe ich eine neue test-Seite mit :

  1. Die oben genannten Vor-Header-Prozess.
  2. Einen Bericht, um zu zeigen, NLS-Parameter-Werte.
  3. Einen Bericht, der zeigen Datum und zahlen aus einer meiner Tabellen.
  4. Ein textfield-Elemente mit einer Quelle, die als Typ "SQL-Abfrage", um eine date.
  5. Ein Zahl-Feld Elements mit einer Quelle, die als Typ "SQL-Abfrage", um eine Nummer.
  6. Eine Taste gebunden mit JQuery, ruft eine Anwendung Prozess, der fordert, eine PL/SQL-Prozedur, die htp.prn() ein Datum aus einer Tabelle, dann füllen mein textfield-Element.
  7. Eine Taste gebunden mit JQuery, die ein insert (mit Anwendung, Verfahren, usw.) die zwei Felder in einer Tabelle.

Sobald die Seite geladen wird, der Bericht zeigt, dass die session wurde geändert coorectly, und ich bekam Recht Zahl-und Datums-Formate, die in den items und in den Bericht. Die "insert" - button tun das einfügen ohne Probleme.

Wenn ich auf die "getDate" - button, um ein Datum aus der Datenbank mit einem ajax-Aufruf, bekomme ich das Datum im französischen format! Und dann die "insert" - Taste schlägt fehl (invalid date).

Haben Sie eine Idee, warum die Werte aus JavaScript (macht einen ajax-call auf eine On-Demand-Application-Prozess für den Aufruf eines PL/SQL-Funktionen in einem Paket) das problem verursacht ?

Und es ist immer noch seltsam in meinen anderen vorhandenen Seiten, bekomme ich ein Falsches format im Bericht selbst, wenn ich denselben Vor-Header-Prozess. Wir haben, um mehr zu sehen, das mein Kollege, haben wir vielleicht eine "versteckte" Stück code irgendwo bricht alle.

Ich habe mir die debug-Meldung Daten für die Seite, aber nichts ungewöhnliches für mich.

Konnte Sie per Zufall versuchen dieses heraus auf apex.oracle.com und sehen Sie, wie reagiert Sie da? Ich werde versuchen und geben diesem einen Wirbel in meinem Umfeld auch.
Ich werde keine Zeit haben heute, aber ich kann versuchen, Anfang Nächster Woche. Danke.
Sorry für die Aufnahme so lange, um zurück zu Ihnen: ich habe versucht, dies mit nur nls_numeric_characters und ich weiß nicht scheinen, um keine Probleme mit dieser. Hat der Datenbank-Benutzer für das schema haben, Rechte zu ändern? Wenn Sie führen Sie die alter-Sitzungen von, sagen wir, sql developer, funktioniert es dann?
Es ist ein guter Beitrag mit vielen Informationen, die ich wünschte, ich könnte mehr helfen. Vielleicht versuchen Sie, stoßen Sie Ihre post auf OTN wieder? Mach ich nehme an, dass die ajax-Abruf ist, weil es eine weitere Sitzung, die auch genutzt wird. Ich würde nicht wirklich erwarten, Ihre vor-Header Prozess mit alter session zu tragen durch zu Ihrer Seite, die Verarbeitung auch, aber ich würde Lesen müssen, in apex + db-sessions-management, um wirklich zu wissen, wie das funktioniert. Es ist auch seltsam, dass Ihre Anwendung Eigenschaften>Sicherheitseinstellungen nicht wirksam für Sie, es Tat gut für mich.
Als fac586 sagt mir auf OTN, in der Tat Sicherheits-Einstellungen werden angewendet, aber sofort abgelöst durch die SESSION, Spracheinstellung, und das ist das Hauptproblem, denke ich. Eine Lösung ist die Ableitung der Sprache der Anwendung aus application Element FSP_LANGUAGE_PREFERENCE, anstatt der Sitzung. Ich habe getestet und alles ist in Ordnung. Aber ich bin mir sicher, dass es eine Lösung gibt, während die Sprache der Applikation abgeleitet aus der Sitzung. Ich werde weiter untersuchen 🙂

InformationsquelleAutor Yann39 | 2012-06-21

Schreibe einen Kommentar