源代码:ZGLanguage 解析SQL数据血缘 之 显示复杂SQL脚本结构图

# 通过 ZGLanguage + Python 将一个复杂存储过程脚本转换成 Echarts 展示:



存储过程脚本如下所示:


CREATE OR REPLACE PROCEDURE PROC_F_CWWS_LOAN

(

    P_AS_OF_DATE IN  DATE,

    RET_FLG      OUT VARCHAR2,

    RET_MSG      OUT VARCHAR2

) IS

/******************************************************************************

功能描述:xxxx业务数据ETL处理

源    表:

目 标 表:MA_F_LOAN

备    注:

******************************************************************************/


  -- 声明变量并初始化

  V_COUNT NUMBER := 0;

  V_PROC_NAME VARCHAR2(200) := 'PROC_F_CWWS_LOAN';

  V_PROC_DESC VARCHAR2(100) := 'xxxx业务数据ETL处理';

  V_P_FREQ VARCHAR2(4) := '';


BEGIN



  ----------------------------------------------------------------

  ----------------------------------------------------------------

  ----------------------------------------------------------------

  ----------------------------------------------------------------


  --写入初始日志

  INSERT INTO M_RUNLOG VALUES (SYSDATE, V_PROC_NAME, 'it is 1');

  COMMIT;


  ETL.PROC_ETL_LOG(P_AS_OF_DATE,


                   V_PROC_NAME,


                   V_PROC_DESC,


                   0,


                   0,


                   NULL,


                   NULL);


  --设置会话日期格式

  EXECUTE IMMEDIATE ' ALTER SESSION SET NLS_DATE_FORMAT = ''YYYY-MM-DD''';

  --查询参数表中,该程序对应的频率值

  SELECT P_FREQ

    INTO V_P_FREQ

    FROM ETL_PROC_STATUS_DEF

   WHERE PROC_NAME = V_PROC_NAME;

  --判断是调度频率

  IF P_AS_OF_DATE = FUNC_GET_FREQ_DAYS(P_AS_OF_DATE, V_P_FREQ) THEN

    --调用分区维护程序


    ETL.ETL_ADD_PARTITION('MA_F_LOAN', P_AS_OF_DATE, 'ETL');


    --删除取上下次支付日临时表

    DELETE TMP_XD_LAST_PAYDATE;

    COMMIT;

    DELETE TMP_XD_NEXT_PAYDATE;

    COMMIT;

    INSERT INTO M_RUNLOG VALUES (SYSDATE, V_PROC_NAME, 'it is 2');

    COMMIT;


    --从还款计划表中取每笔账户最近一次小于等于数据日期还款日,作为上次还款日

    INSERT INTO ETL.TMP_XD_LAST_PAYDATE

      (OBJECTNO, LAST_PAYDATE)

      SELECT OBJECTNO, LAST_PAYDATE

        FROM (SELECT T.OBJECTNO,

                     MAX(TO_DATE(PAYDATE, 'YYYY-MM-DD')) LAST_PAYDATE

                FROM NYBDP.O_CWWS_ACCT_PAYMENT_SCHEDULE T

               WHERE T.AS_OF_DATE = P_AS_OF_DATE

                 AND T.SEQID <> '999'

                 AND TO_DATE(T.PAYDATE, 'YYYY-MM-DD') < P_AS_OF_DATE

               GROUP BY T.OBJECTNO);

    INSERT INTO M_RUNLOG VALUES (SYSDATE, V_PROC_NAME, 'it is 3');

    COMMIT;

    --从还款计划表中取每笔账户最近一次大于数据日期还款日,作为下次还款日

    INSERT INTO ETL.TMP_XD_NEXT_PAYDATE

      (OBJECTNO, NEXT_PAYDATE)

      SELECT OBJECTNO, NEXT_PAYDATE

        FROM (SELECT T.OBJECTNO,

                     MIN(TO_DATE(PAYDATE, 'YYYY-MM-DD')) NEXT_PAYDATE

                FROM NYBDP.O_CWWS_ACCT_PAYMENT_SCHEDULE T

               WHERE T.AS_OF_DATE = P_AS_OF_DATE

                 AND T.SEQID <> '999'

                 AND TO_DATE(T.PAYDATE, 'YYYY-MM-DD') >= P_AS_OF_DATE

               GROUP BY T.OBJECTNO);

    INSERT INTO M_RUNLOG VALUES (SYSDATE, V_PROC_NAME, 'it is 4');

    COMMIT;

    --xxxx业务数据ETL处理

    INSERT INTO MA_F_LOAN

      (ACCOUNT_NUMBER,

       ACCOUNT_STAT,

       RESERVE_FLG,

       ACCOUNT_ID,

       AS_OF_DATE,

       PRODUCT_ID,

       GL_ACCOUNT_ID,

       INT_GL_ACCOUNT_ID,

       ISO_CURRENCY_CD,

       ORG_UNIT_ID,

       CUR_BOOK_BAL,

       OVERDUE_BAL,

       SUM_BOOK_BAL_M,

       SUM_BOOK_BAL_Y,

       AVG_BOOK_BAL_M,

       AVG_BOOK_BAL_Y,

       CUR_BOOK_BAL_C,

       AVG_BOOK_BAL_M_C,

       AVG_BOOK_BAL_Y_C,

       SUM_OVERDUE_BAL_M,

       SUM_OVERDUE_BAL_Y,

       AVG_OVERDUE_BAL_M,

       AVG_OVERDUE_BAL_Y,

       CUR_OVERDUE_BAL_C,

       AVG_OVERDUE_BAL_M_C,

       AVG_OVERDUE_BAL_Y_C,

       ORG_BOOK_BAL,

       MATURITY_DATE,

       ORG_TERM,

       ORG_TERM_MULT,

       ORIGINATION_DATE,

       ACCRUAL_BASIS_CD,

       CUR_NET_RATE,

       MARGIN,

       FLOAD_R,

       FLOAD_M,

       BENCHMARK_RATE,

       AMRT_TYPE_CD,

       CUR_PAYMENT_INT,

       CUR_PAYMENT,

       LAST_PAYMENT_DATE,

       NEXT_PAYMENT_DATE,

       PMT_FREQ,

       PMT_FREQ_MULT,

       REMAIN_NO_PMTS_C,

       ADJUSTABLE_TYPE_CD,