ITPub博客

首页 > 数据库 > Oracle > BULK COLLECT、FORALL和INSERT ALL的综合运用案例

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

原创 Oracle 作者:shiyihai 时间:2007-05-21 17:35:12 0 删除 编辑

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

[@more@]

最近参与一个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;

供大家学习和引用!

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/38542/viewspace-915785/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 什么是数据集市
请登录后发表评论 登录
全部评论
  • 博文量
    235
  • 访问量
    1707881