今天朋友遇到一个比较郁闷的问题, 想了一段时间还没有想出来, 于是在网上问我. 下面这一段代码报了这个错误:

declare
   l_max_date VARCHAR2 (50) := ’2999-12-31 23:59:59′;
   l_format   VARCHAR2 (50) := ‘YYYY-MM-DD HH24:MI:SS’;
begin
  INSERT INTO …
  SELECT ….  FROM tab1@link1 A, tab2@link2 B
  WHERE join_condition
    AND A.COL1 > TO_DATE (l_max_date, l_format);
end;
/

    我在本机上试了是好的啊. 于是我就说我试的版本是10g的, 他说他的是9208的, 于是第一个想法就是Bug了? 正常我们将要一致同意遇到Bug时, 朋友检查了一个远程表的列类型, 发现A.COL1的类型是TIMESTAMP WITH TIME ZONE, 最后改了变量类型就好了.

    我们还真不能随便怀疑Oracle, 那怕是遇到一些让你很不理解的现象, 有可能是你错了或漏了什么地方, 仔细检查一下.