dwd_ali实现

如题所示,本文为dwd_ali实现,但是大量的代码

交易日期

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
DECLARE 
CURSOR C_ABC IS SELECT DEFSTR1 FROM ODS_ALI WHERE ODS_ALI.DEFSTR1<>'交易时间 '
AND ODS_ALI.DEFSTR8 = ' ';
IN_DEFSTR1 VARCHAR2(128);--存储变量
OUT_DEFSTR1 DATE;--结果变量

BEGIN
OPEN C_ABC;
LOOP
FETCH C_ABC INTO IN_DEFSTR1;--提取游标
IF C_ABC % NOTFOUND THEN
EXIT;
END IF;

OUT_DEFSTR1:=TO_DATE(SUBSTR(IN_DEFSTR1,1,INSTR(IN_DEFSTR1,' ')-1),'yyyy/mm/dd');
DBMS_OUTPUT.put_line(OUT_DEFSTR1);
END LOOP;
CLOSE C_ABC;
END;

交易时间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
DECLARE 
CURSOR C_ABC IS SELECT DEFSTR1 FROM ODS_ALI WHERE ODS_ALI.DEFSTR1<>'交易时间 ' AND ODS_ALI.DEFSTR8 = ' ';
IN_DEFSTR2 VARCHAR2(128);--存储变量
OUT_DEFSTR2 VARCHAR2(128);--结果变量
--过渡变量
S1 VARCHAR2 ( 128 );
S2 VARCHAR2 ( 128 );
N1 INTEGER;
BEGIN
OPEN C_ABC;
LOOP
FETCH C_ABC INTO IN_DEFSTR2;--提取游标
IF C_ABC % NOTFOUND THEN
EXIT;
END IF;

S1:=SUBSTR(IN_DEFSTR2,INSTR(IN_DEFSTR2,' ')+1,5);
N1:=LENGTH(S1);
CASE N1
WHEN 4 THEN OUT_DEFSTR2:='0'||S1;
ELSE OUT_DEFSTR2:=S1;
END CASE;
DBMS_OUTPUT.put_line(OUT_DEFSTR2);
END LOOP;
CLOSE C_ABC;
END;

余额

交易金额

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
DECLARE 
CURSOR C_ABC IS SELECT DEFSTR7 FROM ODS_ALI WHERE ODS_ALI.DEFSTR1<>'交易时间 '
AND ODS_ALI.DEFSTR8 = ' ';
IN_DEFSTR4 VARCHAR2( 128 );--存储变量
OUT_DEFSTR4 NUMBER(12,2);--结果变量
BEGIN
OPEN C_ABC;
LOOP
FETCH C_ABC INTO IN_DEFSTR4;--提取游标
IF C_ABC % NOTFOUND THEN
EXIT;
END IF;

OUT_DEFSTR4:=TO_NUMBER(IN_DEFSTR4);
DBMS_OUTPUT.put_line(OUT_DEFSTR4);
END LOOP;
CLOSE C_ABC;
END;

收支方向

这个表有收入、支出、其他三种状态。
当状态为其他时,要根据商品说明判断。

  • LIKE'%充值%',支出
  • LIKE'%还款%' 支出
  • LIKE'%收益发放%' 收入
  • LIKE'%工资理财%' 支出
  • LIKE'%提现%' 收入
  • LIKE'%退款%' 收入
  • LIKE'%余额宝-转出到余额%' 收入
  • 其他的项归于未知
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    DECLARE 
    CURSOR C_ABC IS SELECT DEFSTR6,DEFSTR5 FROM ODS_ALI WHERE ODS_ALI.DEFSTR1<>'交易时间 '
    AND ODS_ALI.DEFSTR8 = ' ';
    IN_DEFSTR5 VARCHAR2( 128 );--存储变量
    OUT_DEFSTR5 VARCHAR2( 128 );--结果变量

    --过渡变量
    S1 VARCHAR2(128);
    BEGIN
    OPEN C_ABC;
    LOOP
    FETCH C_ABC INTO IN_DEFSTR5,S1;--提取游标
    IF C_ABC % NOTFOUND THEN
    EXIT;
    END IF;
    IN_DEFSTR5:=REPLACE(IN_DEFSTR5,' ','');
    IF IN_DEFSTR5 IN('支出','收入') THEN
    OUT_DEFSTR5:=IN_DEFSTR5;
    ELSE
    IF S1 LIKE('%充值%') THEN
    OUT_DEFSTR5:='支出';
    ELSIF S1 LIKE('%还款%') THEN
    OUT_DEFSTR5:='支出';
    ELSIF S1 LIKE('%收益发放%') THEN
    OUT_DEFSTR5:='收入';
    ELSIF S1 LIKE('%工资理财%') THEN
    OUT_DEFSTR5:='支出';
    ELSIF S1 LIKE('%提现%') THEN
    OUT_DEFSTR5:='收入';
    ELSIF S1 LIKE('%退款%') THEN
    OUT_DEFSTR5:='收入';
    ELSIF S1 LIKE('%余额宝-转出到余额%') THEN
    OUT_DEFSTR5:='收入';
    ELSIF S1 LIKE('%海尔血氧仪%') THEN
    OUT_DEFSTR5:='支出';
    ELSE
    OUT_DEFSTR5:='未知';
    DBMS_OUTPUT.put_line(OUT_DEFSTR5||S1);
    END IF;
    END IF;
    END LOOP;
    CLOSE C_ABC;
    END;

    币种

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    DECLARE 
    CURSOR C_ABC IS SELECT DEFSTR6 FROM ODS_ALI WHERE ODS_ALI.DEFSTR1<>'交易时间 '
    AND ODS_ALI.DEFSTR8 = ' ';
    IN_DEFSTR6 VARCHAR2( 128 );--存储变量
    OUT_DEFSTR6 VARCHAR2( 128 );--结果变量

    --过渡变量
    S1 VARCHAR2(128);
    BEGIN
    OPEN C_ABC;
    LOOP
    FETCH C_ABC INTO IN_DEFSTR6;--提取游标
    IF C_ABC % NOTFOUND THEN
    EXIT;
    END IF;
    OUT_DEFSTR6:='CNY';
    END LOOP;
    CLOSE C_ABC;
    END;

    交易本方

    交易对方可能有两方,两方的话通过&区分。
    中国农业银行储蓄卡(0076):ABC
    余额宝:ALI
    余额:ALI
    红包:支付宝红包
    支付宝随机立减:支付宝红包
    现金抵价券:支付宝红包
    花呗分期(3期):花呗
    花呗:花呗
    现金抵价券:支付宝红包
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    DECLARE 
    CURSOR C_ABC IS SELECT DEFSTR8 FROM ODS_ALI WHERE ODS_ALI.DEFSTR1<>'交易时间 '
    AND ODS_ALI.DEFSTR8 = ' ';
    IN_DEFSTR7 VARCHAR2( 128 );--存储变量
    OUT_DEFSTR7 VARCHAR2( 128 );--结果变量

    --过渡变量
    S1 VARCHAR2(128);
    S2 VARCHAR2(128);
    S3 VARCHAR2(128);
    BEGIN
    OPEN C_ABC;
    LOOP
    FETCH C_ABC INTO IN_DEFSTR7;--提取游标
    IF C_ABC % NOTFOUND THEN
    EXIT;
    END IF;

    IN_DEFSTR7:=REPLACE(IN_DEFSTR7,' ','');
    IF INSTR(IN_DEFSTR7,'&')<>0 THEN
    --按着'&'拆分字符串
    S1:=SUBSTR(IN_DEFSTR7,1,INSTR(IN_DEFSTR7,'&')-1);
    S2:=SUBSTR(IN_DEFSTR7,INSTR(IN_DEFSTR7,'&')+1,LENGTH(IN_DEFSTR7));

    --对S1进行判断
    CASE S1
    WHEN '中国农业银行储蓄卡(0076)' THEN
    S3:='ABC';
    WHEN '余额宝' THEN
    S3:='ALI';
    WHEN '余额' THEN
    S3:='ALI';
    WHEN '花呗分期(3期)' THEN
    S3:='花呗';
    WHEN '花呗' THEN
    S3:='花呗';
    ELSE
    S3:='支付宝红包';
    END CASE;
    --对S2进行判断
    CASE S2
    WHEN '中国农业银行储蓄卡(0076)' THEN
    S3:=S3||'*'||'ABC';
    WHEN '余额宝' THEN
    S3:=S3||'*'||'ALI';
    WHEN '余额' THEN
    S3:=S3||'*'||'ALI';
    WHEN '花呗分期(3期)' THEN
    S3:=S3||'*'||'花呗';
    WHEN '花呗' THEN
    S3:=S3||'*'||'花呗';
    ELSE
    S3:=S3||'*'||'支付宝红包';
    END CASE;
    ELSE
    CASE IN_DEFSTR7
    WHEN '中国农业银行储蓄卡(0076)' THEN
    S3:='ABC';
    WHEN '余额宝' THEN
    S3:='ALI';
    WHEN '余额' THEN
    S3:='ALI';
    WHEN '花呗分期(3期)' THEN
    S3:='花呗';
    WHEN '花呗' THEN
    S3:='花呗';
    ELSE
    S3:='支付宝红包';
    END CASE;
    END IF;
    OUT_DEFSTR7 :=S3;
    DBMS_OUTPUT.PUT_LINE(OUT_DEFSTR7);
    END LOOP;
    CLOSE C_ABC;
    END;

    交易对方

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    DECLARE 
    CURSOR C_ABC IS SELECT DEFSTR3 FROM ODS_ALI WHERE ODS_ALI.DEFSTR1<>'交易时间 '
    AND ODS_ALI.DEFSTR8 = ' ';
    IN_DEFSTR8 VARCHAR2( 128 );--存储变量
    OUT_DEFSTR8 VARCHAR2( 128 );--结果变量

    BEGIN
    OPEN C_ABC;
    LOOP
    FETCH C_ABC INTO IN_DEFSTR8;--提取游标
    IF C_ABC % NOTFOUND THEN
    EXIT;
    END IF;

    IN_DEFSTR8:=REPLACE(IN_DEFSTR8,' ','');
    CASE IN_DEFSTR8
    WHEN '银华基金管理股份有限公司' THEN
    OUT_DEFSTR8 :='ALI';
    WHEN '余额宝' THEN
    OUT_DEFSTR8 :='ALI';
    WHEN '中国农业银行' THEN
    OUT_DEFSTR8 :='ABC';
    WHEN '王兴强' THEN
    OUT_DEFSTR8 :='ALI';
    ELSE OUT_DEFSTR8 :=IN_DEFSTR8;
    END CASE;

    DBMS_OUTPUT.PUT_LINE(OUT_DEFSTR8);
    END LOOP;
    CLOSE C_ABC;
    END;

    交易单号

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    DECLARE 
    CURSOR C_ABC IS SELECT DEFSTR10 FROM ODS_ALI WHERE ODS_ALI.DEFSTR1<>'交易时间 '
    AND ODS_ALI.DEFSTR8 = ' ';
    IN_DEFSTR9 VARCHAR2( 128 );--存储变量
    OUT_DEFSTR9 VARCHAR2( 128 );--结果变量

    BEGIN
    OPEN C_ABC;
    LOOP
    FETCH C_ABC INTO IN_DEFSTR9;--提取游标
    IF C_ABC % NOTFOUND THEN
    EXIT;
    END IF;

    OUT_DEFSTR9:=IN_DEFSTR9;
    DBMS_OUTPUT.PUT_LINE(OUT_DEFSTR9);
    END LOOP;
    CLOSE C_ABC;
    END;

    交易备注

    取商品说明
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    DECLARE 
    CURSOR C_ABC IS SELECT DEFSTR5 FROM ODS_ALI WHERE ODS_ALI.DEFSTR1<>'交易时间 ' AND ODS_ALI.DEFSTR9<>'交易关闭 ';
    IN_DEFSTR10 VARCHAR2( 128 );--存储变量
    OUT_DEFSTR10 VARCHAR2( 128 );--结果变量

    BEGIN
    OPEN C_ABC;
    LOOP
    FETCH C_ABC INTO IN_DEFSTR10;--提取游标
    IF C_ABC % NOTFOUND THEN
    EXIT;
    END IF;

    OUT_DEFSTR10:=IN_DEFSTR10;
    DBMS_OUTPUT.PUT_LINE(OUT_DEFSTR10);
    END LOOP;
    CLOSE C_ABC;
    END;

    备注

    1

    暂定