- 浏览: 490101 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
win2011ccc:
...
jstl EL表达式遍历Map -
winterwd:
懂了。插入数字应该使用jxl.write.Number参见下文 ...
用java将数据写入excel -
winterwd:
感谢分享。可是我的程序里面,NumberFormat不能初始化 ...
用java将数据写入excel -
waainli:
Oraxcel这个插件是怎么使用的啊?如何安装和使用。可以详细 ...
Oracle数据的导入和导出(Excel) -
FYIHDG:
key
jstl EL表达式遍历Map
1.【问题现象】
在中文Windows环境的SQL*Plus中使用如下日期操作SQL时报错。具体报错信息如下:
sec@ora10g> insert into t values (TO_Date( '10/22/2009 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM'));
insert into t values (TO_Date( '10/22/2009 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM'))
*
第 1 行出现错误:
ORA-01855: AM/A.M. or PM/P.M. required
sec@ora10g> select TO_Date( '10/22/2009 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM') from dual;
select TO_Date( '10/22/2009 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM') from dual
*
第 1 行出现错误:
ORA-01855: AM/A.M. or PM/P.M. required
2.【问题原因】
在本地NLS_DATE_LANGUAGE参数指定的语言中没有找到“AM”这样的时间定义,也就是说在具体的国家语言下此类“AM”的定义是不相同的,比如,在中文“SIMPLIFIED CHINESE”中就应该指定为“上午/下午”,在美国的语言中就应该指定为“A.M. / P.M.”,在英国语言或西欧语言中就要指定为“AM/PM”。注意其中的区别。
这里给出一种查询NLS_DATE_LANGUAGE参数的方法:
sec@ora10g> col PARAMETER for a30
sec@ora10g> col VALUE for a30
sec@ora10g> select * from v$nls_parameters;
PARAMETER VALUE
------------------------------ ------------------------------
NLS_LANGUAGE SIMPLIFIED CHINESE
NLS_TERRITORY CHINA
NLS_CURRENCY ¥
NLS_ISO_CURRENCY CHINA
NLS_NUMERIC_CHARACTERS .,
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE SIMPLIFIED CHINESE
NLS_CHARACTERSET AL32UTF8
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY ¥
NLS_NCHAR_CHARACTERSET UTF8
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
已选择19行。
3.【问题处理】 方法很简单,第一类处理方法就是严格按照具体国家语言的定义格式书写特定的时间字符串,另一类处理方法是修改NLS_DATE_LANGUAGE参数以便适应某一种日期字符串的写法。下面从这两类处理思想出发,给出三种可行的处理方法。
1)第一种方法:将原字符串中的“AM”修改为中国特色的的“上午”
sec@ora10g> select TO_Date( '22/10/2009 12:00:00 上午', 'DD/MM/YYYY HH:MI:SS AM') from dual;
TO_DATE('22/10
--------------
22-10月-09
sec@ora10g> alter session set NLS_DATE_FORMAT='MM/DD/YYYY HH:MI:SS AM';
会话已更改。
sec@ora10g> select TO_Date( '22/10/2009 12:00:00 上午', 'DD/MM/YYYY HH:MI:SS AM') from dual;
TO_DATE('22/10/200912:00
------------------------
10/22/2009 12:00:00 上午
2)第二种处理方法:直接在session中修改NLS_DATE_LANGUAGE参数,即刻生效。
(1)修改NLS_DATE_LANGUAGE为“AMERICAN”
sec@ora10g> alter session set NLS_DATE_LANGUAGE = 'AMERICAN';
会话已更改。
(2)再一次尝试查询,此时已经不再报错
sec@ora10g> select TO_Date( '10/22/2009 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM') from dual;
TO_DATE('10/
------------
22-OCT-09
(3)格式化一下日期格式,以便更加清晰的查看结果。
sec@ora10g> alter session set NLS_DATE_FORMAT='MM/DD/YYYY HH:MI:SS AM';
会话已更改。
sec@ora10g> select TO_Date( '10/22/2009 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM') from dual;
TO_DATE('10/22/200912:
----------------------
10/22/2009 12:00:00 AM
3)第三种方法:修改Windows注册表中的NLS_LANG参数,以便达到迂回的修改NLS_DATE_FORMAT参数的目的
(1)进入Windows注册表方法
点击Windows操作系统的左下角的“开始”(“start”),然后点击“运行”(Run),最后输入“regedit”回车后便可进入到注册表界面。
(2)在注册表中按照下面的过程导航,即可定位到NLS_LANG变量
“My Computer” --> “HKEY_LOCAL_MACHINE” --> “SOFTWARE” --> “ORACLE” --> “KEY-OraDb10g_home1”
此时在注册表的右侧就能发现“NLS_LANG”的身影了
(3)双击“NLS_LANG”,把内容替换为“AMERICAN_AMERICA.ZHS16GBK”或“AMERICAN_CHINA.ZHS16GBK”即可(NLS_LANG的第一部分“语言”起作用)。
(4)验证查询
sec@ora10g> select TO_Date( '10/22/2009 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM') from dual;
TO_DATE('10/
------------
22-OCT-09
sec@ora10g> alter session set NLS_DATE_FORMAT='MM/DD/YYYY HH:MI:SS AM';
Session altered.
sec@ora10g> select TO_Date( '10/22/2009 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM') from dual;
TO_DATE('10/22/200912:
----------------------
10/22/2009 12:00:00 AM
4.小结
Oracle的日期操作本身相对其他数据类型操作来说复杂很多,在日常的使用过程中要多加总结与记录。
鉴于本文中提到的问题,在书写脚本的时候或使用工具生成脚本的时候,一定要注意脚本中日期类字符串的书写格式。以防因此导致数据无法录入。
发表评论
-
ORACLE Procedure function package cursor 简介
2011-11-23 16:46 29721、 PL/SQL语句块 PL/SQL语句块只适用于Ora ... -
procedure: 一个最简单的oracle存储过程"proc_helloworld"
2011-11-22 17:28 1590本文通过一个最简单的oracle存储过程"proc_ ... -
Oracle数据的导入和导出(Excel)
2011-10-13 16:38 9220一般导入数据到Oracle有几种方法!这可是经验之谈哦!分 ... -
excel 里的数据导入oracle数据库(2)
2011-10-13 11:03 1316有一个比较麻烦但保证 ... -
excel 里的数据导入oracle数据库
2011-10-13 10:59 14431 准备Excel导入数据 2 把Excel文件另存为(文本 ... -
Oracle 创建索引的基本规则总结
2011-09-14 00:35 2973一、B-Tree索引 1. ... -
unique index and constraint
2011-09-01 18:20 20121. 测试unique index 和 unique co ... -
oracle带时分秒日期的比较
2010-11-19 10:29 3678oracle 中不带时分秒的字符串 to_date 转换时 ... -
oracle SQL语句
2010-07-06 17:39 1060查找重复记录: select names,num fro ... -
Oracle中null的使用
2010-07-06 17:28 1343问:什么是NULL?答:在我们不知道具体有什么数据的时 ... -
主键与外键之ORA-02292: integrity constraint
2010-07-06 16:27 28024今天在删除一个表某条记录时,出现如下错误:ORA-02292: ... -
PL/SQL Developer使用技巧
2010-06-10 11:10 22511、右键菜单在PL/SQL De ... -
oracle 查询执行顺序
2010-06-09 21:18 3773oracle 语句提高查询效率的方法 1:.. where c ... -
ORA-01810: 格式代码出现两次
2010-06-09 19:11 2370今天在做sql查询时发现了这样的问题,在网上搜索找到了答案,是 ... -
PL/SQL开发时,异常“ORA-01722: 无效数字或者ORA-01722: invalid number”的原因分析(二)
2010-04-27 10:38 8096我们在写PL/SQL语句时,经常会用到字符串A与数字B的比较, ... -
PL/SQL开发时,异常“ORA-01722: 无效数字或者ORA-01722: invalid number”的原因分析(一)
2010-04-27 10:36 4758如果是字符型的列,在记录中存在非数值的值,那么在隐转换的时候就 ... -
Ora-00054 resource busy and acquire with nowait specified
2010-04-23 10:09 2794当某个数据库用户在数据库中插入、更新、删除一个表的数据,或者增 ... -
Oracle中的空格函数和trim(' ')
2009-12-17 15:20 112331、可以使用LPAD和RPAD在字符串的左边 和右边填补空 ... -
trunc
2009-12-03 16:18 1879TRUNC()函數分兩種: 1.TRUNC(for date ... -
ORA-01855: 要求 AM/A.M. 或 PM/P.M.
2009-12-03 16:01 3169select TRUNC(TO_DATE('24-11-199 ...
相关推荐
http://tomcat.apache.org/download-70.cgi http://tomcat.apache.org/download-70.cgi
oracle12c程序连接时异常: ORA-01017: 用户名/口令无效; 登录被拒绝 的解决方案。
### Oracle 12c ORA-01017 错误详解及解决方案 #### 错误概述 在Oracle数据库管理过程中,用户可能会遇到ORA-01017错误:“用户名/口令无效;登录被拒绝”。这一错误通常出现在尝试连接数据库时,提示提供的用户名...
NULL 博文链接:https://springlin.iteye.com/blog/1520668
-- 解决ORA-00904: "WMSYS"."WM_CONCAT": 标识符无效 的文件包....... -- 解决ORA-00904: "WMSYS"."WM_CONCAT": 标识符无效 的文件包....... -- 解决ORA-00904: "WMSYS"."WM_CONCAT": 标识符无效 的文件包....... ...
在Oracle数据库管理中,"ORA-00990: 权限缺失或无效"是一个常见的错误代码,它表示用户尝试执行的操作没有足够的权限。这个错误通常发生在试图访问、修改或者管理数据库对象(如表、视图、索引等)时。在本篇文章中...
### ora-01033: Oracle Initialization or Shutdown in Progress 解决方法 #### 一、问题背景及原因 **标题**: “ora-01033: Oracle initialization or shutdown in progress 解决方法” **描述**: “ora-01033: ...
ORA-00604: 递归SQL层1出现错误 ORA-03106: 致命的双工通信协议错误 ORA-02063: 紧接着line(源于dblink) 以及 ORA-04052: 在查找远程对象时出错 ORA-00604: 递归SQL层1出现错误 ORA-03120: 双工转换例行程序:整数...
在Oracle数据库系统中,"ORA-01036:非法的变量名/编号"是一个常见的错误,通常出现在PL/SQL代码或者SQL查询语句中,当你尝试使用一个不正确或者未定义的变量时,Oracle数据库会抛出这个错误。这个错误可能是由于...
在Oracle数据库中,"ORA-00904"是一个常见的错误代码,它表示尝试引用一个不存在或无效的标识符。在这个场景下,错误信息提到的是"WM_CONCAT"函数,这表明在Oracle 19c数据库环境中,用户尝试使用WM_CONCAT函数,但...
### 如何处理错误ORA-29275:部分多字节字符 #### 问题背景与描述 在Oracle数据库操作过程中,用户可能会遇到一个特定的错误提示——ORA-29275:部分多字节字符。这一错误通常出现在执行查询`SELECT * FROM V$...
在oracle里面运行一下,解决Exception java.sql.SQLException ORA-00600 内部错误代码
在Oracle数据库系统中,"ORA-00060: 等待资源时检测到死锁" 是一个常见的错误提示,它表明两个或多个事务在执行过程中陷入了无法继续进行的状态,因为彼此都在等待对方释放资源。这种情况通常发生在并发操作中,比如...
Oracle数据库报错ORA-00904: 标识符无效问题解决办法,有可能是字段名或者表名写错了,也有可能是
ORA-32001:write to spfile requested but no spfile is in use请求写入spfile,但没有使用spfile的解决方法 在输入以下语句中报了这样的错误: SQL>alter system set control_files=’/u01/app/oracle/oradata/prod/...
NULL 博文链接:https://snowelf.iteye.com/blog/507976
Oracle Instant Client是Oracle公司提供的一款轻量级的数据库连接工具,用于在Linux系统上与Oracle数据库进行通信。这个特定的版本,“oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm”,是针对64位Linux...
解压后的文件存放路径可以自行设定,但是与后面环境变量设定有关,本文设定/home/orcl/ 下。 头文件目录:/home/orcl/sdk/include/ 库文件目录:/home/orcl/instantclient_11_2/ 2.3 创建 network/admin/ 目录:...
注:Oracle客户端向下兼容,故也可以连接11g的数据库 ... 1.下载instantclient-basic-nt-12.1.0.2.0.zip解压至某路径,如:D:\Database\instantclient_12_1(注:由于...注:sqlnet.ora和tnsnames.ora可向他人复制可得
1.4 创建监听文件,并添加内容 #vim /usr/lib/oracle/11.2/client64/network/admin/tnsnames.ora ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = *IP*)(PORT = 1521)) (CONNECT_DATA = (SERVER = ...