Ако искате да промените NLS параметър в процедура, можете да използвате DBMS_SESSION.SET_NLS
. Дадена е среда, която изглежда така:
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
изпълнението на процедурата променя формата (обърнете внимание на тройните единични кавички):
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
Като алтернатива можете да използвате динамичен SQL, EXECUTE IMMEDIATE
, например:
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
Въпреки това , като Джъстин Пещерни бележки
това е много необичайно. Ако конвертирате между типове данни, винаги трябва да правите това изрично с ясен формат. В случай на дати правилната функция за използване е TO_DATE()