Oracle的Timestamp数据类型与Mysql的Timestamp数据类型兼容的经验

前端之家收集整理的这篇文章主要介绍了Oracle的Timestamp数据类型与Mysql的Timestamp数据类型兼容的经验前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

oracle: select cast(sysdate as timestamp) from DUAL

select CURRENT_TIMESTAMP from dual

MysqL; select CURRENT_TIMESTAMP from dual

MySQL上开发的应用程序,在向Oracle做程序兼容的时候,遇到了一个小麻烦,其他类型的数据都还好办,总能找到替代办法,做到不改动sql文就可以兼容,但在对Timestamp类型的兼容时,却遇到了一个让我有点心跳的小问题:Oracle的Timestamp数据类型插入数据的时候好像不太方便。

由于应用程序是用Java写的,在执行对MysqL的写入时用到的是从MysqL的内置函数CURRENT_TIMESTAMP()中取值,在Oracle中,却没好到这个函数,这样一来,如果要兼容Oracle,就要修改应用程序了。麻烦大了,已经部署了的应用程序。如何是好?

在Oracle 的文档中翻阅相关部分,终于一丝丝惊喜展现出来,有救!

Oracle有一个属性是针对Timestamp数据类型的,那就是CURRENT_TIMESTAMP。虽然不是一个可直接使用的函数,但我确信这是可以解决问题的关键。因为MysqL中有一个全局参数CURRENT_TIMESTAMP,对应的正式CURRENT_TIMESTAMP()函数

OK。解决方法找到,分别在MysqL与Oracle中创建触发器执行timestamp的写入,而写入方式是用CURRENT_TIMESTAMP全局函数替代CRRENT_TIMESTAMP()函数。这样就可以用痛一条sql文"insert into test_table values (CURRENT_TIMESTAMP)"写入时间戳了。

投机取巧的一个小点子,把问题解决

这里是要提醒自己,很多时候,一些看似微小的线索往往是解决重大问题的银弹。只要找到,便可以消灭不死的吸血鬼。

附加一点,对Oracle写入Timestamp类型的值,可以使用以下三种方式:

1.ISNERT INTO TEST_TABLE VALUES (TO_CHAR('2009-02-02 12:12:12','yyyy-mm-dd hh24:mi:ss'))

2.ISNERT INTO TEST_TABLE VALUES (CURRENT_TIMESTAMP),
3.ISNERT INTO TEST_TABLE VALUES (SYSTIMESTAMP),

然而,若提前考虑到对多种数据库的兼容,最好用第二种,因为CURRENT_TIMESTAMP在多种数据库中均有内置。

猜你在找的Oracle相关文章