CREATE OR REPLACE PROCEDURE up_hb_henanyongle
(
av_return OUT VARCHAR2 -- 成功标识
)
AS
-- ## Define Variable(eternal)
n_mark_flag NUMBER(3) := 0; -- DUBEG: MARK Flag
-- flag NUMBER; -- 标识
BEGIN
--v_sql := 'truncate table err_hb_henanyongle';
--EXECUTE IMMEDIATE v_sql;
--v_sql := 'truncate table mid_hb_henanyongle';
--EXECUTE IMMEDIATE v_sql;
-- 1. 根据会员卡号统计品类购买情况
n_mark_flag := 20;
for obj in (
select
MEMBER_CARD_NUMBER ,
sum(CASE when trim(PURCHASE_DEPT)='彩电' then commodity_count end) as caidian,
sum(CASE when trim(PURCHASE_DEPT)='冰箱' then commodity_count end) as bingxiang,
sum(CASE when trim(PURCHASE_DEPT)='冰柜' then commodity_count end) as binggui,
sum(CASE when trim(PURCHASE_DEPT)='洗衣机' then commodity_count end) as xiyiji,
sum(CASE when trim(PURCHASE_DEPT)='空调' then commodity_count end) as kongtiao,
sum(CASE when trim(PURCHASE_DEPT)='手机' then commodity_count end) as shouji,
sum(CASE when trim(PURCHASE_DEPT)='电脑' then commodity_count end) as diannao,
sum(CASE when trim(PURCHASE_DEPT)='照相机' then commodity_count end) as zhaoxiangji,
sum(CASE when trim(PURCHASE_DEPT)='摄像机' then commodity_count end) as shexiangji,
sum(CASE when trim(PURCHASE_DEPT)='白色小件' then commodity_count end) as baisexiaojian,
sum(CASE when trim(PURCHASE_DEPT)='黑色小件' then commodity_count end) as heisexiaojian,
sum(CASE when trim(PURCHASE_DEPT)='微波炉' then commodity_count end) as weibolu,
sum(CASE when trim(PURCHASE_DEPT)='热水器' then commodity_count end) as reshuiqi,
sum(CASE when trim(PURCHASE_DEPT)='消毒柜' then commodity_count end) as xiaodugui,
sum(CASE when trim(PURCHASE_DEPT)='抽油烟机' then commodity_count end) as chouyouyanji,
sum(CASE when trim(PURCHASE_DEPT)='灶具' then commodity_count end) as zaoju,
sum(CASE when trim(PURCHASE_DEPT)='洗碗机' then commodity_count end) as xiwanji,
sum(CASE when trim(PURCHASE_DEPT)='音响、碟机'
or trim(PURCHASE_DEPT)='碟机'
or trim(PURCHASE_DEPT)='音响'
then commodity_count end) as yinxiangdieji,
sum(CASE when trim(PURCHASE_DEPT)='OA'
OR trim(PURCHASE_DEPT)='点钞机'
OR trim(PURCHASE_DEPT)='保管箱'
OR trim(PURCHASE_DEPT)='保险柜'
OR trim(PURCHASE_DEPT)='打印机'
OR trim(PURCHASE_DEPT)='复印机'
OR trim(PURCHASE_DEPT)='传真机'
OR trim(PURCHASE_DEPT)='扫描仪'
OR trim(PURCHASE_DEPT)='碎纸机'
OR trim(PURCHASE_DEPT)='一体机'
OR trim(PURCHASE_DEPT)='碎纸机'
OR trim(PURCHASE_DEPT)='墨盒'
OR trim(PURCHASE_DEPT)='硒鼓'
OR trim(PURCHASE_DEPT)='电话机'
OR trim(PURCHASE_DEPT)='有线电话'
OR trim(PURCHASE_DEPT)='办公家具'
OR trim(PURCHASE_DEPT)='计算器'
OR trim(PURCHASE_DEPT)='其他耗材'
then commodity_count end) as OA,
sum(CASE when trim(PURCHASE_DEPT)='会员商品'
or trim(PURCHASE_DEPT)='会员礼品'
or trim(PURCHASE_DEPT)='会员定制品'
then commodity_count end) as huiyuanshangpin,
sum(CASE when trim(PURCHASE_DEPT)='医疗保健器材' then commodity_count end) as yiliaobaojianqicai,
sum(CASE when trim(PURCHASE_DEPT)='厨卫小件' then commodity_count end) as chuweixiaojian,
sum(CASE when trim(PURCHASE_DEPT)='数码黑小' then commodity_count end) as shumaheixiao,
sum(CASE when trim(PURCHASE_DEPT)='传统配件'
OR trim(PURCHASE_DEPT)='彩电配件'
OR trim(PURCHASE_DEPT)='空调配件'
OR trim(PURCHASE_DEPT)='音响配件'
OR trim(PURCHASE_DEPT)='冰洗配件'
then commodity_count end) as chuangtongpeijian,
sum(CASE when trim(PURCHASE_DEPT)='摄照配件' then commodity_count end) as shexiangpeijian,
sum(CASE when trim(PURCHASE_DEPT)='电脑配件' then commodity_count end) as diannaopeijian,
sum(CASE when trim(PURCHASE_DEPT)='手机配件' then commodity_count end) as shoujipeijian,
sum(CASE when trim(PURCHASE_DEPT)='延保' then commodity_count end) as yanbao,
sum(CASE when trim(PURCHASE_DEPT)='运营商' then commodity_count end) as yunyingshang
from bi.mid_hb_qingdao where member_card_number is not null group by MEMBER_CARD_NUMBER
) loop
insert into ODS_HB_QINGDAO(
MEMBER_CARD_NUMBER ,
TV ,
FRIDGE ,
FREEZER ,
WASHING_MACHINE ,
AIR_CONDITIONING ,
MOBILE ,
PC ,
CAMERA ,
VIDEO_CAMERA ,
WHITE_SMALL ,
BLACK_SMALL ,
MICROWAVE_OVENS ,
WATER_HEATER ,
DISINFECTION_CABINET ,
HOOD ,
STOVE ,
DISHWASHER ,
AUDIO_CHANGER ,
OA ,
MEMBER_COMMODITY ,
HEALTH_CARE_EQUIPMENT ,
SMALL_KITCHEN ,
DIGITAL_BLACK_SMALL , ,
CHUANTONG_ACCESSORIES ,
CAMERA_PHOTO_ACCESSORIES ,
COMPUTER_ACCESSORIES ,
MOBILE_ACCESSORIES ,
WARRANTY ,
OPERATORS
) values(
obj.MEMBER_CARD_NUMBER ,
obj.caidian ,
obj.bingxiang ,
obj.binggui ,
obj.xiyiji ,
obj.kongtiao ,
obj.shouji ,
obj.diannao ,
obj.zhaoxiangji ,
obj.shexiangji ,
obj.baisexiaojian ,
obj.heisexiaojian ,
obj.weibolu ,
obj.reshuiqi ,
obj.xiaodugui ,
obj.chouyouyanji ,
obj.zaoju ,
obj.xiwanji ,
obj.yinxiangdieji ,
obj.OA ,
obj.huiyuanshangpin ,
obj.yiliaobaojianqicai ,
obj.chuweixiaojian ,
obj.shumaheixiao ,
obj.chuangtongpeijian ,
obj.shexiangpeijian ,
obj.diannaopeijian ,
obj.shoujipeijian ,
obj.yanbao ,
obj.yunyingshang
);
END LOOP;
COMMIT;
-- 2. 单品类购买情况 标签
n_mark_flag := 21;
-- 2.1 彩电,冰箱,冰柜,洗衣机,电脑,照相机>5 为异常1
UPDATE bi.ods_hb_qingdao SET
SINGLE_CATEGORY_NUMBER = '异常①'
WHERE TV>5
OR FRIDGE>5
OR FREEZER>5
OR WASHING_MACHINE >5
OR PC>5
OR CAMERA>5;
--2.2 空调>10次,为异常2
UPDATE bi.ods_hb_qingdao SET
SINGLE_CATEGORY_NUMBER = '异常②'
WHERE AIR_CONDITIONING >10 AND SINGLE_CATEGORY_NUMBER is null;
--2.2 两者都符合,标记异常1,2
UPDATE ods_hb_qingdao SET
SINGLE_CATEGORY_NUMBER = '异常①②'
WHERE AIR_CONDITIONING >10 AND SINGLE_CATEGORY_NUMBER ='异常①';
COMMIT;
-- 3. 购买次数大约20次的,标记违规 标签更新
n_mark_flag := 22;
UPDATE bi.ods_hb_qingdao SET CATEGORY_TOTAL_NUMBER = '违规'
WHERE
NVL(TV,0)+
NVL(FRIDGE,0)+
NVL(FREEZER,0)+
NVL(WASHING_MACHINE,0)+
NVL(AIR_CONDITIONING,0)+
NVL(MOBILE,0)+
NVL(PC,0)+
NVL(CAMERA,0)+
NVL(VIDEO_CAMERA,0)+
NVL(WHITE_SMALL,0)+
NVL(BLACK_SMALL,0)+
NVL(MICROWAVE_OVENS,0)+
NVL(WATER_HEATER,0)+
NVL(DISINFECTION_CABINET,0)+
NVL(HOOD,0)+
NVL(STOVE,0)+
NVL(DISHWASHER,0)+
NVL(AUDIO_CHANGER,0)+
NVL(OA,0)+
NVL(MEMBER_COMMODITY,0)+
NVL(HEALTH_CARE_EQUIPMENT,0)+
NVL(SMALL_KITCHEN,0)+
NVL(DIGITAL_BLACK_SMALL,0)+
NVL(CHUANTONG_ACCESSORIES,0)+
NVL(CAMERA_PHOTO_ACCESSORIES,0)+
NVL(COMPUTER_ACCESSORIES,0)+
NVL(MOBILE_ACCESSORIES,0)+
NVL(WARRANTY,0)+
NVL(OPERATORS,0) > 20;
COMMIT;
-- 4. 更新客户购买频度标签 (频度=购买的总数量/最后消费日期-登记日期(月))
n_mark_flag := 23;
UPDATE bi.ods_hb_qingdao c SET
FREQUENCY_CUSTOMER_PURCHASES=ROUND(c.CONSUME_ALL_DEGREE / MONTHS_BETWEEN(c.END_CONSUME_DATE,c.ENTER_DATE),2)
WHERE END_CONSUME_DATE IS NOT NULL AND ENTER_DATE IS NOT NULL
AND MONTHS_BETWEEN(END_CONSUME_DATE,ENTER_DATE) <> 0;
COMMIT;
-- 5. 根据会员卡号,更新会员基本信息
n_mark_flag := 24;
for obj in (
select
MEMBER_CARD_NUMBER ,
OLD_MEMBER_CARD_NUMBER ,
MEMBER_TYPE ,
NAME ,
CONSUME_ALL_MONEY ,
LEAVE_ALL_INTEGRAL ,
CONSUME_ALL_INTEGRAL ,
CONSUME_ALL_DEGREE ,
SEX ,
BRITHDAY ,
CREDENTIALS_ID ,
IMPORTANT_PHONE ,
HOME_PHONE ,
OTHER_PHONE ,
MEMBER_AREA ,
ADDRESS ,
POSTALCODE ,
REMARK ,
ENTER_DATE ,
BUILD_CARD_SHOP ,
END_CONSUME_DATE ,
ATTESTATION_DATE ,
V_OLD_CLASS
from(select
MEMBER_CARD_NUMBER ,
OLD_MEMBER_CARD_NUMBER ,
MEMBER_TYPE ,
NAME ,
CONSUME_ALL_MONEY ,
LEAVE_ALL_INTEGRAL ,
CONSUME_ALL_INTEGRAL ,
CONSUME_ALL_DEGREE ,
SEX ,
BRITHDAY ,
CREDENTIALS_ID ,
IMPORTANT_PHONE ,
HOME_PHONE ,
OTHER_PHONE ,
MEMBER_AREA ,
ADDRESS ,
POSTALCODE ,
REMARK ,
ENTER_DATE ,
BUILD_CARD_SHOP ,
END_CONSUME_DATE ,
ATTESTATION_DATE ,
V_OLD_CLASS,
row_number() over (PARTITION BY member_card_number ORDER BY end_consume_date) id
FROM bi.mid_hb_qingdao)
WHERE id<=1;
) LOOP
UPDATE bi.ods_hb_qingdao m
SET
m.OLD_MEMBER_CARD_NUMBER = obj.OLD_MEMBER_CARD_NUMBER ,
m.MEMBER_TYPE = obj.MEMBER_TYPE ,
m.NAME = obj.NAME ,
m.CONSUME_ALL_MONEY = obj.CONSUME_ALL_MONEY ,
m.LEAVE_ALL_INTEGRAL = obj.LEAVE_ALL_INTEGRAL ,
m.CONSUME_ALL_INTEGRAL = obj.CONSUME_ALL_INTEGRAL ,
m.CONSUME_ALL_DEGREE = obj.CONSUME_ALL_DEGREE ,
m.SEX = obj.SEX ,
m.BRITHDAY = obj.BRITHDAY ,
m.CREDENTIALS_ID = obj.CREDENTIALS_ID ,
m.IMPORTANT_PHONE = obj.IMPORTANT_PHONE ,
m.HOME_PHONE = obj.HOME_PHONE ,
m.OTHER_PHONE = obj.OTHER_PHONE ,
m.MEMBER_AREA = obj.MEMBER_AREA ,
m.ADDRESS = obj.ADDRESS ,
m.POSTALCODE = obj.POSTALCODE ,
m.REMARK = obj.REMARK ,
m.ENTER_DATE = to_date(substr(obj.ENTER_DATE,1,10),'YYYY-mm-dd') ,
m.BUILD_CARD_SHOP = obj.BUILD_CARD_SHOP ,
m.END_CONSUME_DATE = to_date(substr(obj.END_CONSUME_DATE ,1,10),'YYYY-mm-dd') ,
m.ATTESTATION_DATE = obj.ATTESTATION_DATE ,
m.age = obj.V_OLD_CLASS
where m.MEMBER_CARD_NUMBER = obj.MEMBER_CARD_NUMBER;
END LOOP;
COMMIT;
-- 6. 服务请求 标签
n_mark_flag := 25;
for obj in (
SELECT
phone,
zixun_numbers
FROM bi.mid_zixun;
) LOOP
-- 更新
UPDATE bi.ods_hb_qingdao m
SET
m.CONSULTATION_REQUEST = a.zixun_numbers
WHERE m.IMPORTANT_PHONE = a.phone
OR m.HOME_PHONE = a.phone
OR m.OTHER_PHONE = a.phone;
END LOOP;
COMMIT;
-- 7. 投诉 标签
n_mark_flag := 26;
for obj in (
SELECT
phone,
tousu_numbers
FROM mid_tousu;
) LOOP
--更新
UPDATE ods_hb_qingdao m
SET
m.COMPLAINTS = a.tousu_numbers
WHRER m.IMPORTANT_PHONE = a.phone
OR m.HOME_PHONE = a.phone
OR m.OTHER_PHONE = a.phone;
END LOOP;
COMMIT;
-- 8 退货标签
n_mark_flag := 26;
for obj in (
SELECT
phone,
TUIHUANHUO_NUMBER,TYPE
FROM tuihuanhuo_temp WHERE trim(TYPE) = '退货';
) LOOP
--更新
UPDATE ods_hb_qingdao m
SET
m.RETURNS = a.tuihuanhuo_number
where m.IMPORTANT_PHONE = a.phone
OR m.home_phone = a.phone
OR m.other_phone = a.phone;
END LOOP;
COMMIT;
-- 9. 换货标签
n_mark_flag := 26;
for obj in (
SELECT
phone,
TUIHUANHUO_NUMBER,TYPE
FROM tuihuanhuo_temp WHERE trim(TYPE) = '换货';
) LOOP
--更新
UPDATE ods_hb_qingdao m
SET
m.REPLACEMENT = a.tuihuanhuo_number
WHERE m.IMPORTANT_PHONE = a.phone
OR m.home_phone = a.phone
OR m.other_phone = a.phone;
END LOOP;
COMMIT;
DBMS_OUTPUT.put_line( n_mark_flag );
EXCEPTION
-- Capture Oracle SQL Abort.(固定)
WHEN OTHERS THEN
ROLLBACK;
av_return := '-1';
COMMIT;
RETURN;
END;