您的位置:首页 > 数据库 > Oracle

Oracle改变会话日期格式

2013-05-16 13:22 239 查看
问题描述:在存储过程中转换时间的时候想要按着‘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";

...........

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Oracle date