Oracle改变会话日期格式

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

...........

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值