我需要更改存储过程中的 NLS_DATE_FORMAT。似乎它是一个会话变量,我应该在哪里更改变量掩码。
应该在全局声明中还是其他地方完成(我的意思是从前端)。
如果您想更改过程中的 NLS 参数,则可以使用DBMS_SESSION.SET_NLS http://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_sessio.htm#ARPLS68065。给定一个如下所示的环境:
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 http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/executeimmediate_statement.htm#LNPLS01317, 例如:
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
However, as 贾斯汀·凯夫笔记 https://stackoverflow.com/questions/27120420/where-to-change-the-nls-date-format-in-oracle-11g#comment42744101_27120420这是非常不寻常的。如果您要在数据类型之间进行转换,您应该始终这样做明确地具有明确的格式。对于日期,正确使用的函数是TO_DATE() http://docs.oracle.com/cd/E11882_01/server.112/e41084/functions203.htm#SQLRF06132
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)