前阵子帮着开发人员编写了一系列的trigger和procedure来计算数据,昨天TL说数据有问题
select * from test where devid='XXXXXXXXXX' and current_date >= to_date('2011-11-02 00:00:00','yyyy-mm-dd hh24:mi:ss'),类似这样的查询竟然会查出超级多的数据,并且current_date字段显示的是值竟然还有10月份的,这明显和我想要查询的结果不符,然后把>=改成<=竟然一条也没有,遂把to_date('2011-11-02 00:00:00','yyyy-mm-dd hh24:mi:ss')改成sysdate、truncate(sysdate)各种尝试,对current_date进行to_char和to_date的格式化都不能得到我想要的数据,临下班前查询select current_date from test竟然是当前时间,当时并未发现问题所在,甚至去查询了v$sql看看是否有语句一直在update这个字段,下班后冥思苦想也并未有任何思路,唯一想到的法子是第二天上班准备上网查查有没有可以根据object_id来跟踪的方法,来监控一下这个表的改动。
第二天早上上班直接select * from test,发现current_date字段是正常的,没有问题,再select distinct current_date from test却是当前时间,并且只有一条,这张表里应该有几万条数据才对,突然灵感爆发,不会是系统函数吧....
遂select current_date from dual,我晕果然如此,原来我一直查询的是系统函数,当时建表的时候也未考虑到这一点,只能怪自己疏忽大意了。修改查询语句select t.current from test t 得到正常数据,总算是ok了,我也彻底记住这个系统函数了。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25680865/viewspace-710148/
,如需转载,请注明出处,否则将追究法律责任。