问题描述:在存储过程中转换时间的时候想要按着‘yyyy-mm-dd’格式输出,但是输出结果不是这个格式,比如‘2012-12-31’转换输出后是:‘31-12月-12’
解决:ALTER SESSION SET NLS_DATE_FORMAT=' || '''YYYY-MM-DD''
试了下,没效果,我是直接在PL/SQL里设置的。然后运行存储过程没效果,弄了半天,没解决。正要放弃的时候,突然灵感一来,我把这句话加到了存储过程里,O了。这个应该是设置会话或者直接更改服务器语言设置。
=======================================分割==============================================
ORA-01861: literal does not match format string
一般来说这个错误是因为数据库语言照成格式化异常
首先查看你传输的数据的格式是否和数据库匹配
如果还不行在查看你数据的语言(查看数据的sql语句为 select * from v$nls_parameters )
[{PARAMETER=NLS_LANGUAGE, VALUE=AMERICAN},
{PARAMETER=NLS_TERRITORY, VALUE=AMERICA},
{PARAMETER=NLS_CURRENCY, VALUE=$},
{PARAMETER=NLS_ISO_CURRENCY, VALUE=AMERICA},
{PARAMETER=NLS_NUMERIC_CHARACTERS, VALUE=.,},
{PARAMETER=NLS_CALENDAR, VALUE=GREGORIAN},
{PARAMETER=NLS_DATE_FORMAT, VALUE=DD-MON-RR}, 这个标识数据库date类型的格式
{PARAMETER=NLS_DATE_LANGUAGE, VALUE=AMERICAN}, 看下此处的编码格式这个表示date类型的编码格式
{PARAMETER=NLS_CHARACTERSET, VALUE=JA16SJIS}, 还有次数的格式这个表示你数据库的字符编码格式
{PARAMETER=NLS_SORT, VALUE=BINARY}, {
PARAMETER=NLS_TIME_FORMAT, VALUE=HH.MI.SSXFF AM},
{PARAMETER=NLS_TIMESTAMP_FORMAT, VALUE=DD-MON-RR HH.MI.SSXFF AM},
{PARAMETER=NLS_TIME_TZ_FORMAT, VALUE=HH.MI.SSXFF AM TZR},
{PARAMETER=NLS_TIMESTAMP_TZ_FORMAT, VALUE=DD-MON-RR HH.MI.SSXFF AM TZR},
{PARAMETER=NLS_DUAL_CURRENCY, VALUE=$},
{PARAMETER=NLS_NCHAR_CHARACTERSET, VALUE=AL16UTF16},
{PARAMETER=NLS_COMP, VALUE=BINARY},
{PARAMETER=NLS_LENGTH_SEMANTICS, VALUE=BYTE},
{PARAMETER=NLS_NCHAR_CONV_EXCP, VALUE=FALSE}]
==================================================================
Oracle中 NLS_DATE_FORMAT的设置方法
Oracle日期格式默认为:DD-MON-YY,以下是3种方法可以修改使之永久生效;
1、修改glogin.sql文件,这个文件的路径为:
Windows下:
%ORACLE_HOME\sqlplus\admin\
Unix下:
$ORACLE_HOME/sqlplus/admin/
在文件中加入:
alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';
2、修改注册表(windows平台)
开始-->运行-->regedit-->HKEY_LOCAL_MACHINE-->SOFTWARE-->ORACLE-->KEY_ORADb10g_home1
新建字符串值:
NLS_DATE_FORMAT,并设置其值为:YYYY-MM-DD:HH24:MI:SS
3、修改用户环境变量(Unix平台)
export NLS_DATE_FORMAT =AMERICAN
export NLS_DATE_FORMAT ='YYYY-MM-DD HH24:MI:SS'
RMAN会话中设置NLS_DATE_FORMAT 和NLS_LANG
run {
...........
sql 'alter session set NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS";
sql 'alter session set NLS_LANG ="AMERICAN";
...........
}