據兩個例子,
第一個數層級關系的遞歸,用循環
begin for orgId in (select org_id from DWSDATA.T_AGENT_ORG_ID group by agent_id ) loop insert into ken.all_agent(agent_id,all_child_agent ) select orgId.org_id,t.org_id from CDMDATA.agent_list t start with t.agent_id=orgId.agent_id connect by prior agent_id= parent_agent_id ; commit; end loop; end;
多個值循環
begin for orgId in (select org_no,org_name from ken.agent_list_20210812 group by org_no,org_name ) loop insert into ken.all_agent(org_no,org_name ) select orgId.org_no,orgId.org_name from cdmdata.uensxzs_agent_info t start with t.org_no=orgId.org_no connect by prior org_id = parent_org_id ; commit; end loop; end;
第二個,累計值統計時,不能進行group by 所以不能多個日期同時運行,故可以定義一個循環,在多個日期中跑時,進行每個日期循環。例如下面是一個統計30天內無交易的人數
begin for RTrade_Date in (select distinct statistic_date from ADSDATA.XS_DATA_INDEX_DAILY where statistic_date>= trunc(sysdate-1) and statistic_date< trunc(sysdate) ) -- 所有需要統計的日期 loop insert into ADSDATA.XS_DATA_INDEX_DAILY ( statistic_date ,od_category ,statistic_value ,value_comment ,data_timestamp ) select trunc(max(LAST_TRADE_DATE)) as statistic_date ,'交易統計' as od_category ,count(0) statistic_value ,'連續30天無交易商戶數' as value_comment ,sysdate as data_timestamp from ( select max(Trade_Date) as LAST_TRADE_DATE,shop_no from XS.TRADE_DETAIL_HIS where Trade_Date < RTrade_Date.Statistic_Date+1 group by shop_no --每個用戶交易的最早日期 ) where LAST_TRADE_DATE+30 >RTrade_Date.Statistic_Date+1; commit; end loop; end;