Die NLS_DATE_FORMAT parameter nicht gesetzt wird mit dynamischen SQL

Ich habe eine gespeicherte Prozedur mit dynamischem SQL eine Tabelle erstellt und eine andere Prozedur aufruft, um fügen Sie einige Werte in die Tabelle ein. Die gespeicherte Prozedur setzt auch einige session-Einstellungen, von denen die NLS_DATE_FORMAT.

Dieser parameter funktioniert nicht, wenn die Prozedur ausgeführt wird. Ich habe versucht, läuft das Verfahren unter SYSTEM (der Besitzer) und unter einem Benutzer ADMIN mit DBA, Connect und Resource-Berechtigungen, die jedoch immer angezeigt, in das format DD-MON-RR statt der gewünschten MM/DD/YYYY. Im SQL Developer unter DBA->Datenbank-Konfiguration->Aktuelle Datenbank-Eigenschaften NLS_DATE_FORMAT erscheint auch in dem format DD-MON-RR.

Gibt es eine Möglichkeit, dies zu ändern für die gesamte Datenbank? Das habe ich gefunden und habe Folgendes versucht, aber es hat überhaupt nicht funktioniert (dies umfasst das beenden und Neustarten der Datenbank):

ALTER SYSTEM SET NLS_DATE_FORMAT = 'MM/DD/YYYY' SCOPE=SPFILE;

Ist, habe ich mich in das SPFILE und init.ora für die Antworten, aber die beste, die ich fand, war ein trigger, der den Wert nach der Anmeldung für jeden Benutzer. Ich bin nicht dagegen, aber ich möchte, um herauszufinden, ob gibt es eine Globale Möglichkeit, die parameter einer Zeit, die zimmerreserviereung, ohne das Sie einen trigger erstellen, werden die folgenden session-parameter:

ALTER SESSION SET NLS_DATE_FORMAT = 'MM/DD/YYYY';

Und hier ist der relevante Teil meiner gespeicherten Prozedur:

CREATE OR REPLACE
PROCEDURE DATE_DIM_PROCEDURE(P_DATE DATE)
    AUTHID CURRENT_USER            --Not sure why this is needed since my only two users, but it throws an error without it
IS
    V_START_DATE DATE := '01/01/1950';
    V_CURRENT_DATE DATE := V_START_DATE;
    V_END_DATE DATE := '12/31/2099';
BEGIN
    EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_LANGUAGE = ''AMERICAN'' ';
    EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_TERRITORY = ''AMERICA'' ';
    EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_CALENDAR = ''GREGORIAN'' ';
    EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_DATE_FORMAT = ''MM/DD/YYYY'' ';

    EXECUTE IMMEDIATE 'CREATE TABLE (...)';

    WHILE V_CURRENT_DATE <= V_END_DATE
        NEW_DATE(P_DATE);          --Procedure call that inserts values into table
    LOOP;
END DATE_DIM_PROCEDURE;

Sobald das Verfahren läuft (und fordert die weitere Vorgehensweise zum einfügen von Werten), wenn ich öffnen Sie die Tabelle, für alle Benutzer, die NLS_DATE_FORMAT hat sich nicht verändert (d.h. es ist immer noch im format DD-MON-RR statt MM/DD/YYYY).

Dank.

  • Ich editierte meinen Beitrag, Alex...hoffentlich habe ich beantwortet alle Ihre Fragen. Grundsätzlich erwarte ich, dass, wenn jeder Benutzer sieht in einer Tabelle mit Datumsangaben in Sie, er/Sie wird sehen, wie Sie in der format MM/DD/YYYY (die ich dachte, war möglich).
InformationsquelleAutor user2063351 | 2013-07-11
Schreibe einen Kommentar