Oracle
 sql >> Database >  >> RDS >> Oracle

Dove modificare NLS_DATE_FORMAT in Oracle 11g?

Se desideri modificare un parametro NLS in una procedura, puoi utilizzare DBMS_SESSION.SET_NLS . Dato un ambiente simile a questo:

SQL> select value
  2    from nls_session_parameters
  3   where parameter = 'NLS_DATE_FORMAT';

VALUE
------------------------------------------

DD-MON-RR

SQL> select sysdate from dual;

SYSDATE
---------
25-NOV-14

eseguendo la procedura cambia il formato (notare le triple virgolette singole):

SQL> begin
  2     dbms_session.set_nls('nls_date_format', '''yyyy-mm-dd''');
  3  end;
  4  /

PL/SQL procedure successfully completed.

SQL> select sysdate from dual;

SYSDATE
----------
2014-11-25

In alternativa puoi utilizzare SQL dinamico, EXECUTE IMMEDIATE , ad esempio:

SQL> begin
  2     execute immediate 'alter session set nls_date_format = ''yyyy-mm''';
  3  end;
  4  /

PL/SQL procedure successfully completed.

SQL> select sysdate from dual;

SYSDATE
-------
2014-11

Tuttavia , come Justin Note rupestri questo è molto insolito. Se stai convertendo tra tipi di dati, dovresti sempre farlo esplicitamente con un formato esplicito. Nel caso delle date la funzione corretta da utilizzare è TO_DATE()