BULK COLLECT、FORALL和INSERT ALL的综合运用案例

本文介绍了一种在BI项目中通过使用BULKCOLLECT、FORALL和INSERTALL来提高ODS区数据分流适配到F明细区性能的方法。详细展示了关键语句及数据分流至不同明细表的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近参与一个BI项目,在将ODS区中数据分流适配到F明细区中时,运用到了BULK COLLECT、FORALL和INSERT ALL用来提高性能。关键语句如下:


最近参与一个BI项目,在将ODS区中数据分流适配到F明细区中时,运用到了BULK COLLECT、FORALL和INSERT ALL用来提高性能。关键语句如下:

select PLATFORMID,PRODUCTID,IP,DEAL_DATE,SUB_PATH,URL_PARA,DOMAIN_NAME,REQ_CODE,SEND_BYTE,UAID,UASTR,GATEWAY,
MSISDN,MID,CITYID,VISIT_PERIOD,PROVINCEID,BRAND_ID
BULK COLLECT INTO PLATFORMIDS,PRODUCTIDS,IPS,DEAL_DATES,SUB_PATHS,URL_PARAS,DOMAIN_NAMES,REQ_CODES,SEND_BYTES,UAIDS,UASTRS,GATEWAYS,
MSISDNS,MIDS,CITYIDS,VISIT_PERIODS,PROVINCEIDS,BRAND_IDS --LIMIT 10000
from O_APACHE_LOG
WHERE m_datefrom<= DEAL_DATE AND DEAL_DATE < m_dateto; -- 分流适配
v_SQLERRLOG:='INSERT ALL INTO TMP_UC_EXPLORE_D,TMP_UC_INTERACT_D,TMP_UC_DOWNLOAD_D,TMP_UC_FORECAST_D,TMP_UC_HELPFUL_D,TMP_UC_SEARCH_D';
if(sql%rowcount>0) then --有数据
FORALL i IN 1 .. PLATFORMIDS.COUNT
INSERT ALL
WHEN substr(UC_CONDITION_CODE,1,4)='UC01' THEN --浏览类
INTO TMP_UC_EXPLORE_D(STAT_TIME,MOBILE,BRAND_ID,PROVINCEID,CITYID,CLASS_STR1,CLASS_STR2,CLASS_STR3)
VALUES(DEAL_DATES(i),MSISDNS(i),BRAND_IDS(i),PROVINCEIDS(i),CITYIDS(i),UC_CLASS_STR1,UC_CLASS_STR2,UC_CLASS_STR3)
WHEN substr(UC_CONDITION_CODE,1,4)='UC02' THEN --互动类
INTO TMP_UC_INTERACT_D(STAT_TIME,MOBILE,BRAND_ID,PROVINCEID,CITYID,CLASS_STR1,CLASS_STR2,CLASS_STR3)
VALUES(DEAL_DATES(i),MSISDNS(i),BRAND_IDS(i),PROVINCEIDS(i),CITYIDS(i),UC_CLASS_STR1,UC_CLASS_STR2,UC_CLASS_STR3)
WHEN substr(UC_CONDITION_CODE,1,4)='UC03' THEN --下载类
INTO TMP_UC_DOWNLOAD_D(STAT_TIME,MOBILE,BRAND_ID,PROVINCEID,CITYID,CLASS_STR1,CLASS_STR2,CLASS_STR3)
VALUES(DEAL_DATES(i),MSISDNS(i),BRAND_IDS(i),PROVINCEIDS(i),CITYIDS(i),UC_CLASS_STR1,UC_CLASS_STR2,UC_CLASS_STR3)
WHEN substr(UC_CONDITION_CODE,1,4)='UC04' THEN --测算类
INTO TMP_UC_FORECAST_D(STAT_TIME,MOBILE,BRAND_ID,PROVINCEID,CITYID,CLASS_STR1,CLASS_STR2,CLASS_STR3)
VALUES(DEAL_DATES(i),MSISDNS(i),BRAND_IDS(i),PROVINCEIDS(i),CITYIDS(i),UC_CLASS_STR1,UC_CLASS_STR2,UC_CLASS_STR3)
WHEN substr(UC_CONDITION_CODE,1,4)='UC05' THEN --实用类
INTO TMP_UC_HELPFUL_D(STAT_TIME,MOBILE,BRAND_ID,PROVINCEID,CITYID,CLASS_STR1,CLASS_STR2,CLASS_STR3)
VALUES(DEAL_DATES(i),MSISDNS(i),BRAND_IDS(i),PROVINCEIDS(i),CITYIDS(i),UC_CLASS_STR1,UC_CLASS_STR2,UC_CLASS_STR3)
WHEN substr(UC_CONDITION_CODE,1,4)='UC06' THEN --搜索类
INTO TMP_UC_SEARCH_D(STAT_TIME,MOBILE,BRAND_ID,PROVINCEID,CITYID,CLASS_STR1,CLASS_STR2,CLASS_STR3)
VALUES(DEAL_DATES(i),MSISDNS(i),BRAND_IDS(i),PROVINCEIDS(i),CITYIDS(i),UC_CLASS_STR1,UC_CLASS_STR2,UC_CLASS_STR3)
SELECT UC_CONDITION_CODE,UC_CLASS_STR1,UC_CLASS_STR2,UC_CLASS_STR3
FROM D_UC_APACHE_CONFIG
WHERE CONDITION_CLAUSE;

供大家学习和引用!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值