Se você deseja alterar um parâmetro NLS em um procedimento, pode usar
DBMS_SESSION.SET_NLS
. Dado um ambiente que se parece com isso: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
executar o procedimento altera o formato (observe as aspas simples triplas):
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
Como alternativa, você pode usar SQL dinâmico,
EXECUTE IMMEDIATE
, por exemplo: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
No entanto , como Justin Notas da caverna isso é altamente incomum. Se você estiver convertendo entre tipos de dados, sempre faça isso explicitamente com formato explícito. No caso de datas, a função correta a ser usada é
TO_DATE()