使用日期数据类型时无法插入日期和时间

时间:2012-01-18 20:56:39

标签: oracle oracle11g

使用date数据类型时,我遇到了一些问题。当试图将一行保存到其中的字段时,它会抛出错误ora 01830并抱怨转换日期格式图片结束等等。现在当我进行插入时,我使用to_date函数,格式为“dd-mon-yyyy hh24:mi:ss”。当然,当我删除时间元素时,一切都很完美。

检查sysdate,我注意到没有显示时间元素,我使用了alter session set nls_date_format来设置我要保存到表中的日期和时间,这有效!

我用过alter system set nls_date_format =“dd-mon-yyyy hh24:mi:ss”scope = spfile;这表明它已被更改,我可以在企业管理控制台中看到该设置。在sqlplus中,我关闭数据库,并使用startup mount重新启动; alter database open;然后选择sysdate,它仍然显示日期为dd-mon-yy,但仍然没有时间!检查企业管理,并查找nls_date_format设置仍然显示为“dd-mon-yyyy hh24:mi:ss”。

所以,我的问题是这个 - 我做错了什么?为什么无法在Oracle 11g中使用日期保存日期和时间?????

由于

2 个答案:

答案 0 :(得分:1)

日期在Oracle中以“秒”粒度存储。

显示格式取决于系统和会话。在您的情况下,由于您使用sqlplus进行连接,因此您使用的是客户端的默认会话格式,不包含时间。你需要执行:

ALTER SESSION SET nls_date_format ="dd-mon-yyyy hh24:mi:ss";

当您启动sqlplus客户端以更改默认显示时。有一个客户端文件(glogin.sql?),sqlplus将在启动时运行。如果您希望每次启动该客户端时都执行此命令,则可以在此处放置此类命令。我很确定sqlplus客户端在启动时发送了“alter session set nls_date ...”。

一般来说,在输出日期时,我认为最好通过执行TO_CHAR(myDateColumn,“dd-mon-yyyy hh24:mi:ss”)来明确格式化。如果您以编程方式阅读日期,则无需担心,因为您处理的是内部格式,而不是显示格式。

答案 1 :(得分:0)

当输入数据与使用的日期格式不匹配时,我看到了这个错误。检查你的数据将是我的建议。