2012-01-18 167 views
0

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

检查sysdate,我注意到时间元素没有显示,我用alter session set nls_date_format来设置我想保存到表的日期和时间,它工作!

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

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

谢谢

+1

正在写入的表中的列的数据类型是什么?我假设它是'日期'。你试图写入表的数据的数据类型是什么?你是否试图在表中写入'DATE'(即调用'SYSDATE'函数的结果)?或者你是否试图采用'VARCHAR2',将其转换为'DATE',并将其写入表中?而关于写入数据或显示数据的问题? – 2012-01-18 21:01:39

+0

你能告诉我们to_date()调用吗?包括varchar2日期的输入 – 2012-01-19 06:18:32

回答

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”)来明确格式。如果你正在以编程方式阅读日期,你不需要担心,因为你正在处理内部格式,而不是显示格式。

0

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

相关问题