如何为每个过程调用设置nls_timestamp_format

时间:2012-07-17 14:50:43

标签: xml oracle11g

我有一个将插入xmltype列的存储过程。该列引用具有日期时间类型列的模式。日期需要格式如下:YYYY-MM-DD“T”HH24:MI:SS

通过匿名阻止测试,我可以发出ALTER SESSION来将时间格式更改为当前会话

alter session set nls_timestamp_format = 'YYYY-MM-DD"T"HH24:MI:SS';

insert into table1 (id, xmlcolumn) values (1, updatexml(
   '/root/order/id/text()', p_order_id,
   '/root/order/date/text()', to_timestamp(sysdate,'DD-MON-RRRRHH:MI:SS.FF')
));

虽然将它移动到存储过程,Oracle阻止我使用ALTER SESSION,我试过:

DBMS_SESSION.SET_NLS('nls_timestamp_format','YYYY-MM-DD"T"HH24:MI:SS');

但是SQL Developer说无效选项。

我是Oracle的新手(作为SQL DB开发人员),关于如何设置时间格式的任何指针?

提前致谢

1 个答案:

答案 0 :(得分:1)

DBMS_SESSION.SET_NLS程序不会引发任何异常。但是,如果value参数代表format maskdouble-quoted中的ALTER SESSION command),则需要将其括在triple quotes中。否则,将引发以下Oracle错误:       ORA-00922:选项丢失或无效。 试试这个:

DBMS_SESSION.SET_NLS('nls_timestamp_format','''YYYY-MM-DD "T"HH24:MI:SS''');