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

来源:互联网 发布:单片机输出电压 编辑:程序博客网 时间:2024/06/05 09:00

在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在多种数据库中均有内置。

 

原创粉丝点击