Domanda

Ho un procedimento oracolo che prende data come parametro e viene chiamato da due differenti applicazioni web Java, nell'ambito della procedura di estraggo il giorno usando to_char(date, 'd') dalla data passata. Non sono in grado di scoprire perché il giorno restituito da un app è diverso da altri. Sto usando lo stesso driver ojdbc per entrambe le applicazioni. Ha qualcosa a che vedere con variabili macchina ENV queste applicazioni sono in esecuzione a?

Grazie

È stato utile?

Soluzione

Prova a specificare esplicitamente il fuso orario su entrambi i contenitori webapp passando loro l'argomento -Duser.timezone="America/New_York" VM (regolare secondo i vostri bisogni di fuso orario) quando li startingup.

Per risolvere il tuo commento, nel livello di applicazione è possibile specificare in modo esplicito il fuso orario desiderato quando si chiama il tuo proc memorizzato. Ad esempio:

CallableStatement statement = null;
Connection conn = null;

    try {
        conn = getYourConnection();
        Calendar dbCal = new GregorianCalendar(YOUR_DATABASE_TIMEZONE);

        String sql = "begin schema_name.package_name.stored_proc(var1=>?, " +
                "var2=>?); end;";

        statement = conn.prepareCall(sql);
        statement.setInt(1, something);
        statement.setTimestamp(2, yourDate.getTime(), dbCal);

        statement.execute();

        conn.commit();

    } finally {
        if (statement!=null) statement.close();
        if (conn!=null) conn.close();
    }

Altri suggerimenti

questo è perché il primo giorno della settimana non è la stessa in tutti i paesi, ad esempio in Europa il primo giorno della settimana è Lunedi mentre negli Stati Uniti è la Domenica. Prendere in considerazione:

SQL> select * from nls_session_parameters where parameter = 'NLS_TERRITORY';

PARAMETER                      VALUE
------------------------------ ----------------------------------------
NLS_TERRITORY                  AMERICA

SQL> select to_char(date '2010-12-07', 'D') from dual;

TO_CHAR(DATE'2010-12-07','D')
-----------------------------
3

SQL> alter session set nls_territory=FRANCE;

Session altered

SQL> select to_char(date '2010-12-07', 'D') from dual;

TO_CHAR(DATE'2010-12-07','D')
-----------------------------
2

Impostare il parametro di sessione NLS_TERRITORY all'inizio della procedura, se dipende da esso.

provare a controllare il locale predefinito in JAVA / Oracle in entrambe le applicazioni.

Credo che possa dipendere dal set internazionale predefinita in JAVA.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top