2017-08-08 58 views
2
declare cursor C1 is select vc_emp_id ,vc_rep_to from hrpay.persdet where vc_emp_id in 
(select vc_emp_id from hrpay.mst_timesheet 
where vc_cur_mgr_id = '85' and vc_status = 'P'and vc_emp_id =1214); 
begin for emp_rec in C1 loop 
update 
hrpay.mst_timesheet set vc_cur_mgr_id =emp_rec.vc_rep_to 
    where vc_cur_mgr_id = '85' and vc_status ='P'and vc_emp_id=emp_rec.vc_emp_id; 
commit; 
end loop; end; 

已聲明CURSOR BUT其不更新相同。未在PL/SQL中使用光標更新

+0

你不應該有環路內提交。只應在您完成所有事務時提交。 – Prathyush

+0

爲什麼你一直在使用循環?單個相關更新將更簡單,更高效。在執行此操作之前或之後,我們無法看到您的表格結構或數據;你需要調試遊標查詢(它是否自己找到任何東西?),檢查數據是否符合你的預期(並且如果你在跨多個會話插入/運行這個/查詢時提交),數據類型匹配,等 –

+0

爲了測試目的,我在這裏做單個更新,但我必須做多個更新和vc_cur_mgr_id必須根據當前的vc_emp_id動態來。 –

回答

2

根據您的predicat,在那裏你已vc_emp_id = 1214,你可以試試這個:

update hrpay.mst_timesheet 
set vc_cur_mgr_id = (select vc_emp_id 
        from hrpay.persdet 
        where vc_emp_id = 1214 
         and rownum = 1) 
where vc_cur_mgr_id = '85' 
    and vc_status = 'P' 
    and vc_emp_id = 1214; 
+0

謝謝,但我想要做多個更新。爲了測試目的,我在這裏包含了vc_emp_id。 –