我写了一个存储过程,是每隔一段时间从表A取增量数据到表B的。逻辑是这样的:BEGIN
  1.从特定表中取出记录上次执行存储过程的标杆时间T1;
  2.将特定表中的标杆时间设为sysdate,即本次存储过程执行时间T2;
  3.将表A中T1和T2之间的数据取出到中间表TEMP,再按要求处理后插入表B;
EXCEPTION
   WHEN OTHERS
   THEN
      将错误写到数据库;
END存储过程写好后,有一个VC程序每隔10分钟调用它一次。在增量数据很小的情况下(几十条),执行是没有问题的。可是当增量为几万或几十万时,数据就导不进表B,而标杆时间却已经变为了T2。数据库中没有写任何错误。程序也没有报类似于“执行时间过长这样”的日志。我将标杆时间改为T1,再用手动执行这个存储过程,数据就正常导进表B了,无论数据量多大都正确。请问各位大虾,这是什么原因?要怎样处理呢?

解决方案 »

  1.   

    可能是oracle分析该sql数据量比较大就将进程队列排到后面去了没有立即执行。
      

  2.   

    实际上你可以创建一个Job来每10分钟调用一次此存储过程,如果没有问题,那么就是你VC程序有问题.
    如果Job执行的结果也有问题,那么就是你的存储过程执行的时间太长了,超过了10分钟.
      

  3.   

    代码实在是太长了,不好贴。我单步执行过都没有问题的,会是逻辑问题导致了这种情况吗?如果可能的话,我可以贴出来。TO ColinGan(浪子):这种方法我会试试的