用游标逐条update数据时,会出现某些数据没update的情况,为什么会这样?

cdevfrbgt123 2016-10-17 04:40:46
在用游标逐条的update 某个table的数据时,游标会跳过某些行,使的某些行的数据没有update,为什么会这样?非常急,谢谢!!!

create or replace procedure X_SD_site_IO_test
is
cursor c_inout_bound is select * from FCT_IN_OUT_DATA FOR UPDATE;
tmp_site_l varchar(400) ;

begin
for c_row in c_inout_bound loop

tmp_site_l := '';
select NAME1 into tmp_site_l from(
SELECT dim_rma.NAME name1, dim_rma.rma_center
FROM DIM_R_CENTER dim_rma
WHERE c_row.SOURCE_PROFILE_ID = dim_rma.ID order by rma_center desc)
where rownum = 1 ;


tmp_site_l:= NVL(tmp_site_l, 'Others');

UPDATE FCT_IN_OUT_DATA SET SOURCE_Site = tmp_site_l WHERE CURRENT OF c_inout_bound;

end loop;


end;
/
...全文
646 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jdsnhan 2016-10-19
  • 打赏
  • 举报
回复
捕获异常看看吧。 EXCEPTION WHEN NO_DATA_FOUND THEN dbms_output.put_line('select 无结果'); WHEN OTHERS THEN dbms_output.put_line('还有异常');;
cdevfrbgt123 2016-10-18
  • 打赏
  • 举报
回复
补充一下,loop里面的update只更新上面的select结果一样的数据,以后其他的数据都不会更新,debug发现是select语句出错:

select NAME1 into tmp_site_l from( 
              SELECT dim_rma.NAME name1, dim_rma.rma_center
              FROM DIM_R_CENTER dim_rma
              WHERE c_row.SOURCE_PROFILE_ID = dim_rma.ID order by rma_center desc) 
        where rownum = 1 ;
上面使用游标的select错误出在哪儿??各位大神
sxq129601 2016-10-18
  • 打赏
  • 举报
回复
看看是不是逻辑有问题,NAME1 值有多个一样的,在修改时会不会修改了同一条数据,例如:A-->B,然后又B-->A
超叔csdn 2016-10-18
  • 打赏
  • 举报
回复
当一条记录都不返回或者返回多条记录时select into语法都会报错
cdevfrbgt123 2016-10-17
  • 打赏
  • 举报
回复
各位大神帮忙看看是什么问题
cdevfrbgt123 2016-10-17
  • 打赏
  • 举报
回复
是我的游标update写法有错吗?

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧