首页 新闻 会员 周边 捐助

存储过程部分数据插入不到一个表中,但把这块拿出来执行又能将数据插入到表

0
悬赏园豆:50 [已解决问题] 解决于 2019-03-01 17:30

存储过程中有一段语句是将某种规则的数据插入到一个表中,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;执行,查询数据发现那部分数据又能够插入到表

海月孤影的主页 海月孤影 | 初学一级 | 园豆:46
提问于:2016-10-31 20:56
< >
分享
最佳答案
0

仔细检查条件,sql语句。proc里面吧所有条件呀,sql呀,都打印出来排错,细心!自己查不出来,找同事给你review

收获园豆:30
czd890 | 专家六级 |园豆:14488 | 2016-10-31 21:59
其他回答(1)
0

查看数据库日志,分析存储过程,实在找不到错误,建议重写一次,然后对比,重写时不要参考当前的代码。

收获园豆:20
晓菜鸟 | 园豆:2594 (老鸟四级) | 2016-11-02 16:57

对于这种情况我主要需要知道的是为什么会这样,语句贴出来也是让广大道友参与看看,出现这种情况很是郁闷,就相当于同一条语句会出两种结果,这种是很难接受的,我在想难不成是oracle的bug,可能这也涉及到过程执行的方式

支持(0) 反对(0) 海月孤影 | 园豆:46 (初学一级) | 2016-11-03 09:40

@海月孤影: 你可以从datetime这方面去考虑考虑。

支持(0) 反对(0) 晓菜鸟 | 园豆:2594 (老鸟四级) | 2016-11-03 09:43
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册