存储过程中有一段语句是将某种规则的数据插入到一个表中,test调试执行到这段插入语句后的commit发现插入了部分数据,还有部分在接收表中没有,若是把这一段语句拿出来,什么都不改,声明相同参数执行后又能将另一部分数据插入到表。好诡异啊,求解释
delete t_c_tmp_detail ;
commit;
INSERT INTO t_c_tmp_detail (srid,groupname)
SELECT t.srId,g.groupname
FROM table1 t,
table2 b,
table3 g,
table1 t1
WHERE b.createtime>=i_startdate
AND b.createtime<i_enddate
AND t.sriD=b.srid
AND nvl(t.deptno,'003002')=g.deptid---
AND nvl(t.Fnodeid,t.nodeid)=t1.nodeid
AND nvl(t1.ziduan1,99) NOT IN (1,2)
;
commit;
语句如上: deptno为部门id
fnodeid为上一个部门处理环节对应的id,
nodeid为当前环节对应的id
ziduan1为特殊操作的一个记录项;
语句是把某段时间的记录插入到临时表中(t_c_tmp_detail),排除特殊处理过的下一项记录,对于以上语句在存储过程中test测试到commit结束查询t_c_tmp_detail 数据发现比语句中查询的数据结果少了一小部分,但是把这段语句复制出来到新窗口declare 参数后begin
end;执行,查询数据发现那部分数据又能够插入到表
仔细检查条件,sql语句。proc里面吧所有条件呀,sql呀,都打印出来排错,细心!自己查不出来,找同事给你review
查看数据库日志,分析存储过程,实在找不到错误,建议重写一次,然后对比,重写时不要参考当前的代码。
对于这种情况我主要需要知道的是为什么会这样,语句贴出来也是让广大道友参与看看,出现这种情况很是郁闷,就相当于同一条语句会出两种结果,这种是很难接受的,我在想难不成是oracle的bug,可能这也涉及到过程执行的方式
@海月孤影: 你可以从datetime这方面去考虑考虑。