oracle package实现同步

--please switch to app_ops_task schema
-- create package declaration
create or replace package invoice_check_package AS
    procedure generate_data_from_dwh;
    procedure generate_invoice_from_dwh;
    procedure generate_contract_his_from_dwh;
    procedure clean_invoice_dwh_data;
    function get_purpose_code(v_str varchar2) return varchar2;
end invoice_check_package;


--create package body
    CREATE OR REPLACE PACKAGE BODY invoice_check_package AS
    procedure generate_contract_his_from_dwh as
        CURSOR CUR_DWH_INVOICE IS
            SELECT T.CONTRACT_UUID,
                   T.CONTRACT_NUMBER,
                   T.INVOICE_NUMBER,
                   T.INVOICE_AMOUNT,
                   T.INVOICE_RESULT
            FROM OWNER_HUB.TEMP_DPDCN_1250 T;
        INFO_ROLE CUR_DWH_INVOICE%ROWTYPE;
    begin
        OPEN CUR_DWH_INVOICE;
        LOOP
            begin
                FETCH CUR_DWH_INVOICE
                    INTO INFO_ROLE;
                EXIT WHEN CUR_DWH_INVOICE%notfound;
                INSERT INTO T_H_CONTRACT_OPERATION
                (ID,
                 CONTRACT_UUID,
                 CONTRACT_NUMBER,
                 EVENT_CODE,
                 DWH_CONTRACT_CALCULATE_STATUS,
                 CREATOR,
                 CDATE,
                 EDITOR,
                 EDATE)
                VALUES
                (SEQ_CONTRACT_OPERATION.NEXTVAL,
                 LOWER(INFO_ROLE.CONTRACT_UUID),
                 INFO_ROLE.CONTRACT_NUMBER,
                 '2',
                 '0',
                 'System',
                 SYSDATE,
                 'System',
                 SYSDATE);
            EXCEPTION
                WHEN OTHERS THEN
                    CONTINUE;
            END;
        END LOOP;
        CLOSE CUR_DWH_INVOICE;

        DELETE FROM T_H_CONTRACT_OPERATION d1
        where d1.EVENT_CODE = '2'
          and d1.ROWID <
              (select MAX(ROWID)
               from T_H_CONTRACT_OPERATION d2
               where d1.CONTRACT_UUID = d2.CONTRACT_UUID);
        COMMIT;
    end generate_contract_his_from_dwh;

    procedure generate_invoice_from_dwh as
        CURSOR CUR_DWH_INVOICE IS
            SELECT T.CONTRACT_UUID,
                   T.CONTRACT_NUMBER,
                   T.INVOICE_NUMBER,
                   T.INVOICE_AMOUNT,
                   T.INVOICE_RESULT,
                   T.ANSWER_CL4_1,
                   T.Answer_Comments
            FROM OWNER_HUB.TEMP_DPDCN_1250 T;
        INFO_ROLE CUR_DWH_INVOICE%ROWTYPE;
    begin
        OPEN cur_dwh_invoice;
        LOOP
            begin
                FETCH CUR_DWH_INVOICE
                    INTO INFO_ROLE;
                exit when CUR_DWH_INVOICE%notfound;
                INSERT INTO T_INVOICE_INFO
                (ID,
                 CONTRACT_UUID,
                 CABINET_UUID,
                 DWH_INVOICE_NUMBER,
                 UPLOAD_CHANNEL,
                 UPLOAD_TIME,
                 CL_INVOICE_AMOUNT,
                 INVOICE_RESULT,
                 cl_invoice_real_purpose,
                 CL_REMARK,
                 CREATOR,
                 CDATE,
                 EDITOR,
                 EDATE)
                VALUES
                (SEQ_INVOICE_INFO.NEXTVAL,
                 LOWER(INFO_ROLE.CONTRACT_UUID),
                 rawtohex(sys_guid()),
                 INFO_ROLE.INVOICE_NUMBER,
                 'DWH',
                 SYSDATE,
                 INFO_ROLE.INVOICE_AMOUNT,
                 INFO_ROLE.INVOICE_RESULT,
                 get_purpose_code(INFO_ROLE.ANSWER_CL4_1 || INFO_ROLE.Answer_Comments),
                 INFO_ROLE.Answer_Comments,
                 'System',
                 SYSDATE,
                 'System',
                 SYSDATE);
            EXCEPTION
                WHEN OTHERS THEN
                    begin
                        insert into T_INVOICE_DATA_DWH_ERROR_LOG
                        (ID,
                         CONTRACT_UUID,
                         Contract_Number,
                         INVOICE_NUMBER,
                         INVOICE_AMOUNT,
                         Invoice_Result)
                        values
                        (SEQ_INVOICE_DATA_DWH_ERROR_LOG.NEXTVAL,
                         INFO_ROLE.CONTRACT_UUID,
                         INFO_ROLE.Contract_Number,
                         INFO_ROLE.INVOICE_NUMBER,
                         INFO_ROLE.Invoice_Amount,
                         INFO_ROLE.Invoice_Result);
                    EXCEPTION
                        WHEN OTHERS THEN
                            CONTINUE;
                    end;
                    CONTINUE;
            END;
        END LOOP;
        CLOSE CUR_DWH_INVOICE;
        COMMIT;
    end generate_invoice_from_dwh;

    procedure generate_data_from_dwh as
    begin
        begin
            invoice_check_package.clean_invoice_dwh_data;
            invoice_check_package.generate_invoice_from_dwh;
            invoice_check_package.generate_contract_his_from_dwh;
        end;
    end generate_data_from_dwh;

    procedure clean_invoice_dwh_data as
    begin
        begin
            delete from T_H_CONTRACT_OPERATION ts
            where EVENT_CODE = '2'
              and ts.CDATE >= SYSDATE - 10;
            delete from T_INVOICE_INFO ts
            where lower(ts.UPLOAD_CHANNEL) = lower('DWH')
              and ts.CDATE >= SYSDATE - 10;
            commit;
        end;
    end clean_invoice_dwh_data;

    function get_purpose_code(v_str VARCHAR2) return varchar2 is
        v_retrun VARCHAR2(1000);
    BEGIN
        IF v_str IS NULL THEN
            RETURN NULL;
        ELSE
            BEGIN
                SELECT CASE
                           WHEN v_str IS NULL THEN
                               NULL
                           ELSE
                                   (CASE
                                        WHEN instr(v_str, '日用品(食品、洗护用品等)') >= 1 THEN
                                            'dc,' --'日用品(食品、洗护用品等),'
                                        ELSE
                                            ''
                                       END) || (CASE
                                                    WHEN instr(v_str, '家庭装修') >= 1 THEN
                                                        'f1,' --'家庭装修,'
                                                    ELSE
                                                        ''
                                   END) || (CASE
                                                WHEN instr(v_str, '家用电器') >= 1 THEN
                                                    'ha,' -- '家用电器,'
                                                ELSE
                                                    ''
                                   END) || (CASE
                                                WHEN instr(v_str, '手机数码') >= 1 THEN
                                                    'ce,' --'手机数码,'
                                                ELSE
                                                    ''
                                   END) || (CASE
                                                WHEN instr(v_str, '旅游度假') >= 1 THEN
                                                    'd,' --'旅游度假,'
                                                ELSE
                                                    ''
                                   END) || (CASE
                                                WHEN instr(v_str, '教育培训') >= 1 THEN
                                                    't,' ---'教育培训,'
                                                ELSE
                                                    ''
                                   END) || (CASE
                                                WHEN instr(v_str, '家具家居') >= 1 THEN
                                                    'f2,' --'家具家居,'
                                                ELSE
                                                    ''
                                   END) || (CASE
                                                WHEN instr(v_str, '服饰箱包') >= 1 THEN
                                                    'p4,' ---'服饰箱包,'
                                                ELSE
                                                    ''
                                   END) || (CASE
                                                WHEN instr(v_str, '摩托车/电动自行车/三轮车') >= 1 THEN
                                                    's1,' ---'摩托车/电动自行车/三轮车,'
                                                ELSE
                                                    ''
                                   END) || (CASE
                                                WHEN instr(v_str, '医疗美容') >= 1 THEN
                                                    'h,' --- '医疗美容,'
                                                ELSE
                                                    ''
                                   END) || (CASE
                                                WHEN instr(v_str, '租房自住') >= 1 THEN
                                                    'ra,' --- '租房自住,'
                                                ELSE
                                                    ''
                                   END) || (CASE
                                                WHEN instr(v_str, '红白喜事') >= 1 THEN
                                                    'w,' --- '红白喜事,'
                                                ELSE
                                                    ''
                                   END) || (CASE
                                                WHEN instr(v_str, '母婴用品/玩具乐器') >= 1 THEN
                                                    'bt,' --'母婴用品/玩具乐器,'
                                                ELSE
                                                    ''
                                   END) || (CASE
                                                WHEN instr(v_str, '运动户外') >= 1 THEN
                                                    'so,' ---'运动户外,'
                                                ELSE
                                                    ''
                                   END) || (CASE
                                                WHEN instr(v_str, '车类服务') >= 1 THEN
                                                    'cr,' --'车类服务,'
                                                ELSE
                                                    ''
                                   END) || (CASE
                                                WHEN instr(v_str, '休闲娱乐') >= 1 THEN
                                                    'le,' --- '休闲娱乐,'
                                   END)
                           END
                       INTO v_retrun
                FROM dual;

                SELECT TRIM(',' FROM v_retrun) INTO v_retrun FROM dual;
            EXCEPTION
                WHEN invalid_number THEN
                    RETURN 0;
            END;
            RETURN v_retrun;
        END IF;
    end;

end invoice_check_package;

-- please switch to app_ops_task schema
-- Call the procedure, data range [100w,200w],uat call this, need  about 10-12 min,only need call one time
--       begin
--         invoice_check_package.generate_data_from_dwh;
--       end;


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值