declare v_rlt number(8):=3; l_sql varchar2(300); -- variable that contains a query l_c sys_refcursor; -- cursor variable(weak cursor). l_res1 VARCHAR2(30 BYTE); -- variable containing fetching data l_res2 date; -- variable containing fetching data l_res3 date; -- variable containing fetching data begin <<while_loop>> while(v_rlt > 0) loop l_sql := 'SELECT GUID, MIN(LAST_UPDT_DATE_TIME_STAMP),MAX(LAST_UPDT_DATE_TIME_STAMP) FROM XX WHERE XX'; open l_c for l_sql; loop fetch l_c into l_res1,l_res2, l_res3; exit when l_c%notfound; -- Exit the loop if there is nothing to fetch. if(l_res2 < l_res3) then UPDATE XX;end if; if(l_res2 = l_res3) then UPDATE XX;end if; COMMIT; -- process fetched data end loop; close l_c; -- close the cursor SELECT COUNT(*) into v_rlt from (XX); end loop while_loop; dbms_output.put_line('WHILE finished'); end; / COMMIT;