sql - 递归update

时间:2023-03-09 16:24:54
sql - 递归update
 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;