Si vous souhaitez modifier un paramètre NLS dans une procédure, vous pouvez utiliser DBMS_SESSION.SET_NLS
. Dans un environnement qui ressemble à ceci :
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
l'exécution de la procédure modifie le format (notez les triples guillemets simples) :
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
Vous pouvez également utiliser SQL dynamique, EXECUTE IMMEDIATE
, par exemple :
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
Cependant , comme Justin Notes sur la grotte
c'est très inhabituel. Si vous convertissez entre les types de données, vous devez toujours le faire explicitement avec un format explicite. Dans le cas des dates, la fonction correcte à utiliser est TO_DATE()