oracle for loop 循環用法


據兩個例子,

第一個數層級關系的遞歸,用循環

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;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM