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),