存储过程编写规范

  --********************************************************
  --* 存储过程名:EXP_TO_BATCH
  --* 版本:1.0
  --* 用途:批量导入报销(支持日常、加班、差旅、报销)
  --* 参数:当前用户ID 批号
  --* 输出:O_STATE:0成功 1:失败 O_MSG:成功或失败信息
  --*
  --* 作者:humeng  时间:2013-07-18
  --********************************************************
  PROCEDURE EXP_TO_BATCH(I_USER_ID  NUMBER,
                         I_BATCH_NO VARCHAR2,
                         O_STATE    OUT NUMBER,
                         O_MSG      OUT VARCHAR2) IS
    V_STATE               NUMBER := 0;
    V_MSG                 VARCHAR2(2000) := ‘‘;
    V_MSG1                VARCHAR2(2000) := ‘‘;
    V_ERP_USER_ID         NUMBER;
    V_COUNT1              NUMBER; --劳务稿酬数量
    V_COUNT2              NUMBER; --日常、加班、差旅数量
    V_COUNT3              NUMBER; --期间数量
    V_COUNT4              NUMBER; --已导入数量
    V_COUNT5              NUMBER; --本次导入数量
    V_RESPONSIBILITY_NAME VARCHAR2(200); --职责名称
    V_RESPONSIBILITY_ID   VARCHAR2(200); --职责ID
    V_ORG_NAME            VARCHAR2(200); --OU名称
    V_BATCH_NUM           VARCHAR2(200); --批号
    V_OUTPUT_HEADER_ID    NUMBER; --导入头ID
    V_INTERFACE_RUN_ID    NUMBER; --EBS请求号
    E_ERR EXCEPTION;
  BEGIN
    NULL;
    --判断ERP_USER_ID是否存在
    IF I_USER_ID IS NULL OR I_BATCH_NO IS NULL THEN
      V_STATE := ‘1‘;
      V_MSG   := ‘用户ID或者批号不存在!‘;
      RAISE E_ERR;
    END IF;
    BEGIN
      SELECT SUA.ERP_USER_ID
        INTO V_ERP_USER_ID
        FROM SYS_USER_ALL SUA
       WHERE SUA.USER_ID = I_USER_ID;
    EXCEPTION
      WHEN NO_DATA_FOUND THEN
        V_STATE := ‘1‘;
        V_MSG   := ‘用户ERP_USER_ID不存在!‘;
        RAISE E_ERR;
    END;
    --劳务稿酬
    FOR OPEN_DATA1 IN (SELECT EAH.ORG_ID
                         FROM EXP_POST_LINE_TEMP     EPLT,
                              EXP_EXPENSE_HEADERS    EEH,
                              EXP_ACCOUNTING_HEADERS EAH
                        WHERE 1 = 1
                          AND NVL(EAH.DISABLED, 0) = 0
                          AND EAH.EXPENSE_HEADER_ID = EEH.EXPENSE_HEADER_ID
                          AND EPLT.ITEM3 = EAH.EXPENSE_HEADER_ID
                          AND EPLT.BATCH_NO = I_BATCH_NO
                          AND EEH.EXPENSE_TYPE = ‘LABOR_AUTHOR‘
                        GROUP BY EAH.ORG_ID) LOOP
      BEGIN

        BEGIN
          SELECT PEOV.ORG_NAME
            INTO V_ORG_NAME
            FROM [email protected] PEOV
           WHERE PEOV.ORG_ID = OPEN_DATA1.ORG_ID;
          SELECT PEURG.RESPONSIBILITY_NAME, PEURG.RESPONSIBILITY_ID
            INTO V_RESPONSIBILITY_NAME, V_RESPONSIBILITY_ID
            FROM [email protected] PEURG
           WHERE PEURG.RESPONSIBILITY_NAME LIKE ‘%发票%‘
             AND PEURG.USER_ID = V_ERP_USER_ID
             AND PEURG.ORG_ID = OPEN_DATA1.ORG_ID;
        EXCEPTION
          WHEN OTHERS THEN
            V_MSG := V_MSG || ‘</br>‘ || V_ORG_NAME ||
                     ‘劳务稿酬导入失败职责错误:ORG_ID:‘ || OPEN_DATA1.ORG_ID ||
                     ‘,ERP_USER_ID:‘ || V_ERP_USER_ID;
            RAISE E_ERR;
        END;

        --生成批号
        SELECT CODING_LINK(‘EXP‘, ‘OUT‘, ‘‘) INTO V_BATCH_NUM FROM DUAL;

        --更新批号到记账头表
        UPDATE EXP_ACCOUNTING_HEADERS EAHU
           SET EAHU.BATCH_NAME = V_BATCH_NUM, EAHU.ERP_UPLOAD_FLAG = ‘T‘
         WHERE EAHU.EXPENSE_HEADER_ID IN
               (SELECT EEH.EXPENSE_HEADER_ID
                  FROM EXP_POST_LINE_TEMP     EPLT,
                       EXP_EXPENSE_HEADERS    EEH,
                       EXP_ACCOUNTING_HEADERS EAH
                 WHERE 1 = 1
                   AND NVL(EAH.DISABLED, 0) = 0
                   AND EAH.EXPENSE_HEADER_ID = EEH.EXPENSE_HEADER_ID
                   AND EPLT.ITEM3 = EAH.EXPENSE_HEADER_ID
                   AND EPLT.BATCH_NO = I_BATCH_NO
                   AND EEH.EXPENSE_TYPE = ‘LABOR_AUTHOR‘
                   AND EAH.ORG_ID = OPEN_DATA1.ORG_ID);

        --存在导入的单据
        SELECT COUNT(1)
          INTO V_COUNT4
          FROM EXP_POST_LINE_TEMP     EPLT,
               EXP_EXPENSE_HEADERS    EEH,
               EXP_ACCOUNTING_HEADERS EAH
         WHERE 1 = 1
           AND NVL(EAH.DISABLED, 0) = 0
           AND EAH.EXPENSE_HEADER_ID = EEH.EXPENSE_HEADER_ID
           AND EPLT.ITEM3 = EAH.EXPENSE_HEADER_ID
           AND EPLT.BATCH_NO = I_BATCH_NO
           AND EEH.EXPENSE_TYPE = ‘LABOR_AUTHOR‘
           AND EAH.ORG_ID = OPEN_DATA1.ORG_ID
           AND EAH.ERP_UPLOAD_DATE IS NOT NULL;
        IF V_COUNT4 <> 0 THEN
          V_MSG := V_MSG || ‘</br>‘ || V_ORG_NAME ||
                   ‘劳务稿酬导入失败存在已导入单据:ORG_ID:‘ || OPEN_DATA1.ORG_ID ||
                   ‘,ERP_USER_ID:‘ || V_ERP_USER_ID || ‘已导入数量:‘ || V_COUNT4;
          RAISE E_ERR;
        END IF;

        --判断期间是否在
        SELECT COUNT(1)
          INTO V_COUNT3
          FROM EXP_POST_LINE_TEMP     EPLT,
               EXP_EXPENSE_HEADERS    EEH,
               EXP_ACCOUNTING_HEADERS EAH,
               SYS_ERP_PERIOD_V       SEPV
         WHERE 1 = 1
           AND NVL(EAH.DISABLED, 0) = 0
           AND EAH.EXPENSE_HEADER_ID = EEH.EXPENSE_HEADER_ID
           AND EPLT.ITEM3 = EAH.EXPENSE_HEADER_ID
           AND EPLT.BATCH_NO = I_BATCH_NO
           AND EEH.EXPENSE_TYPE = ‘LABOR_AUTHOR‘
           AND EAH.ORG_ID = OPEN_DATA1.ORG_ID
           AND EAH.GL_DATE BETWEEN SEPV.START_DATE AND SEPV.END_DATE
           AND SEPV.PERIOD_TYPE = ‘AP‘
           AND SEPV.CLOSING_STATUS NOT IN (‘O‘, ‘F‘);
        IF V_COUNT3 <> 0 THEN
          V_MSG := V_MSG || ‘</br>‘ || V_ORG_NAME ||
                   ‘劳务稿酬导入失败存在非法期间:ORG_ID:‘ || OPEN_DATA1.ORG_ID ||
                   ‘,ERP_USER_ID:‘ || V_ERP_USER_ID || ‘非法期间数量:‘ ||
                   V_COUNT3;
          RAISE E_ERR;
        END IF;

        --初始化接口表,返回头ID
        CSYS_OUTPUT_ERP_PKG.OUTPUT_ERP_INITIALIZTION(‘APINV‘,
                                                     I_USER_ID,
                                                     ‘EXP_DAILY_TYPE_WORKFLOW‘,
                                                     V_OUTPUT_HEADER_ID,
                                                     V_MSG1);
        IF V_OUTPUT_HEADER_ID IS NULL OR V_MSG1 IS NOT NULL THEN
          V_MSG := V_MSG || ‘</br>‘ || V_ORG_NAME ||
                   ‘劳务稿酬导入失败初始化接口表错误:ORG_ID:‘ || OPEN_DATA1.ORG_ID ||
                   ‘,ERP_USER_ID:‘ || V_ERP_USER_ID || ‘原因:‘ || V_MSG1;
          RAISE E_ERR;
        END IF;

        --把职责ID记录到导入头表中,方便自动导核销时使用
        UPDATE SYS_OUTPUT_ERP_HEADERS SOEH
           SET SOEH.RESPONSBILITY_ID = V_RESPONSIBILITY_ID
         WHERE SOEH.OUTPUT_HEADER_ID = V_OUTPUT_HEADER_ID;

        --更新记账头表OUTPUT_HEADER_ID
        UPDATE EXP_ACCOUNTING_HEADERS EAHU
           SET EAHU.OUTPUT_HEADER_ID = V_OUTPUT_HEADER_ID,
               EAHU.LAST_UPDATED_BY  = I_USER_ID,
               EAHU.LAST_UPDATE_DATE = SYSDATE
         WHERE NVL(EAHU.DISABLED, 0) = 0
           AND EAHU.EXPENSE_HEADER_ID IN
               (SELECT EEH.EXPENSE_HEADER_ID
                  FROM EXP_POST_LINE_TEMP     EPLT,
                       EXP_EXPENSE_HEADERS    EEH,
                       EXP_ACCOUNTING_HEADERS EAH
                 WHERE 1 = 1
                   AND NVL(EAH.DISABLED, 0) = 0
                   AND EAH.EXPENSE_HEADER_ID = EEH.EXPENSE_HEADER_ID
                   AND EPLT.ITEM3 = EAH.EXPENSE_HEADER_ID
                   AND EPLT.BATCH_NO = I_BATCH_NO
                   AND EEH.EXPENSE_TYPE = ‘LABOR_AUTHOR‘
                   AND EAH.ORG_ID = OPEN_DATA1.ORG_ID);
        --导入劳务稿酬到接口表
        CSYS_OUTPUT_ERP_PKG.OUTPUT_ERP_INSERT_EXP_DATA(V_OUTPUT_HEADER_ID,
                                                       NULL,
                                                       V_MSG1);
        IF V_MSG1 IS NOT NULL THEN
          V_MSG := V_MSG || ‘</br>‘ || V_ORG_NAME ||
                   ‘劳务稿酬导入失败导入劳务稿酬到接口表错误:ORG_ID:‘ || OPEN_DATA1.ORG_ID ||
                   ‘,ERP_USER_ID:‘ || V_ERP_USER_ID || ‘原因:‘ || V_MSG1;
          RAISE E_ERR;
        END IF;
        --更新接口表状态行
        CSYS_OUTPUT_ERP_PKG.STATE_UPDATE(V_OUTPUT_HEADER_ID,
                                         I_USER_ID,
                                         V_MSG1);
        IF V_MSG1 IS NOT NULL THEN
          V_MSG := V_MSG || ‘</br>‘ || V_ORG_NAME ||
                   ‘劳务稿酬导入失败更新接口表状态行错误:ORG_ID:‘ || OPEN_DATA1.ORG_ID ||
                   ‘,ERP_USER_ID:‘ || V_ERP_USER_ID || ‘原因:‘ || V_MSG1;
          RAISE E_ERR;
        END IF;
        --本次导入数量
        SELECT COUNT(DISTINCT EEH.EXPENSE_HEADER_ID)
          INTO V_COUNT5
          FROM EXP_POST_LINE_TEMP     EPLT,
               EXP_EXPENSE_HEADERS    EEH,
               EXP_ACCOUNTING_HEADERS EAH
         WHERE 1 = 1
           AND NVL(EAH.DISABLED, 0) = 0
           AND EAH.EXPENSE_HEADER_ID = EEH.EXPENSE_HEADER_ID
           AND EPLT.ITEM3 = EAH.EXPENSE_HEADER_ID
           AND EPLT.BATCH_NO = I_BATCH_NO
           AND EEH.EXPENSE_TYPE = ‘LABOR_AUTHOR‘
           AND EAH.ORG_ID = OPEN_DATA1.ORG_ID
           AND EAH.ERP_UPLOAD_DATE IS NULL;
        COMMIT;
        --导入数据到EBS
        CSYS_OUTPUT_ERP_PKG.OUTPUT_AP_INV_IMP_DATA(V_OUTPUT_HEADER_ID,
                                                   V_ERP_USER_ID,
                                                   V_RESPONSIBILITY_ID,
                                                   ‘PR‘,
                                                   ‘1A2B3C4D5E6F‘,
                                                   ‘AP_INV_IMP‘,
                                                   V_INTERFACE_RUN_ID,
                                                   V_MSG1);
        IF V_MSG1 IS NOT NULL THEN
          V_MSG := V_MSG || ‘</br>‘ || V_ORG_NAME ||
                   ‘劳务稿酬导入失败导入EBS错误:ORG_ID:‘ || OPEN_DATA1.ORG_ID ||
                   ‘,ERP_USER_ID:‘ || V_ERP_USER_ID || ‘原因:‘ || V_MSG1;
          RAISE E_ERR;
        END IF;
        V_MSG := V_MSG || ‘</br>‘ || V_ORG_NAME || ‘劳务稿酬导入成功:‘ ||
                 ‘&nbsp;导入职责:‘ || V_RESPONSIBILITY_NAME || ‘&nbsp;导入数量:‘ ||
                 V_COUNT5 || ‘&nbsp;批号:‘ || V_BATCH_NUM || ‘&nbsp;请求号:‘ ||
                 V_INTERFACE_RUN_ID;
        COMMIT;
      EXCEPTION
        WHEN E_ERR THEN
          ROLLBACK;
      END;
    END LOOP;
    --日常报销、加班、差旅
    FOR OPEN_DATA1 IN (SELECT EAH.ORG_ID
                         FROM EXP_POST_LINE_TEMP     EPLT,
                              EXP_EXPENSE_HEADERS    EEH,
                              EXP_ACCOUNTING_HEADERS EAH
                        WHERE 1 = 1
                          AND NVL(EAH.DISABLED, 0) = 0
                          AND EAH.EXPENSE_HEADER_ID = EEH.EXPENSE_HEADER_ID
                          AND EPLT.ITEM3 = EAH.EXPENSE_HEADER_ID
                          AND EPLT.BATCH_NO = I_BATCH_NO
                          AND EEH.EXPENSE_TYPE <> ‘LABOR_AUTHOR‘
                        GROUP BY EAH.ORG_ID) LOOP
      BEGIN

        BEGIN
          SELECT PEOV.ORG_NAME
            INTO V_ORG_NAME
            FROM [email protected] PEOV
           WHERE PEOV.ORG_ID = OPEN_DATA1.ORG_ID;
          SELECT PEURG.RESPONSIBILITY_NAME, PEURG.RESPONSIBILITY_ID
            INTO V_RESPONSIBILITY_NAME, V_RESPONSIBILITY_ID
            FROM [email protected] PEURG
           WHERE PEURG.RESPONSIBILITY_NAME LIKE ‘%发票%‘
             AND PEURG.USER_ID = V_ERP_USER_ID
             AND PEURG.ORG_ID = OPEN_DATA1.ORG_ID;
        EXCEPTION
          WHEN OTHERS THEN
            V_MSG := V_MSG || ‘</br>‘ || V_ORG_NAME ||
                     ‘日常、加班、差旅报销导入失败职责错误:ORG_ID:‘ || OPEN_DATA1.ORG_ID ||
                     ‘,ERP_USER_ID:‘ || V_ERP_USER_ID;
            RAISE E_ERR;
        END;

        --生成批号
        SELECT CODING_LINK(‘EXP‘, ‘OUT‘, ‘‘) INTO V_BATCH_NUM FROM DUAL;

        --更新批号到记账头表
        UPDATE EXP_ACCOUNTING_HEADERS EAHU
           SET EAHU.BATCH_NAME = V_BATCH_NUM, EAHU.ERP_UPLOAD_FLAG = ‘T‘
         WHERE EAHU.EXPENSE_HEADER_ID IN
               (SELECT EEH.EXPENSE_HEADER_ID
                  FROM EXP_POST_LINE_TEMP     EPLT,
                       EXP_EXPENSE_HEADERS    EEH,
                       EXP_ACCOUNTING_HEADERS EAH
                 WHERE 1 = 1
                   AND NVL(EAH.DISABLED, 0) = 0
                   AND EAH.EXPENSE_HEADER_ID = EEH.EXPENSE_HEADER_ID
                   AND EPLT.ITEM3 = EAH.EXPENSE_HEADER_ID
                   AND EPLT.BATCH_NO = I_BATCH_NO
                   AND EEH.EXPENSE_TYPE <> ‘LABOR_AUTHOR‘
                   AND EAH.ORG_ID = OPEN_DATA1.ORG_ID);

        --存在导入的单据
        SELECT COUNT(1)
          INTO V_COUNT4
          FROM EXP_POST_LINE_TEMP     EPLT,
               EXP_EXPENSE_HEADERS    EEH,
               EXP_ACCOUNTING_HEADERS EAH
         WHERE 1 = 1
           AND NVL(EAH.DISABLED, 0) = 0
           AND EAH.EXPENSE_HEADER_ID = EEH.EXPENSE_HEADER_ID
           AND EPLT.ITEM3 = EAH.EXPENSE_HEADER_ID
           AND EPLT.BATCH_NO = I_BATCH_NO
           AND EEH.EXPENSE_TYPE <> ‘LABOR_AUTHOR‘
           AND EAH.ORG_ID = OPEN_DATA1.ORG_ID
           AND EAH.ERP_UPLOAD_DATE IS NOT NULL;
        IF V_COUNT4 <> 0 THEN
          V_MSG := V_MSG || ‘</br>‘ || V_ORG_NAME ||
                   ‘日常、加班、差旅报销导入失败存在已导入单据:ORG_ID:‘ || OPEN_DATA1.ORG_ID ||
                   ‘,ERP_USER_ID:‘ || V_ERP_USER_ID || ‘已导入数量:‘ || V_COUNT4;
          RAISE E_ERR;
        END IF;

        --判断期间是否在
        SELECT COUNT(1)
          INTO V_COUNT3
          FROM EXP_POST_LINE_TEMP     EPLT,
               EXP_EXPENSE_HEADERS    EEH,
               EXP_ACCOUNTING_HEADERS EAH,
               SYS_ERP_PERIOD_V       SEPV
         WHERE 1 = 1
           AND NVL(EAH.DISABLED, 0) = 0
           AND EAH.EXPENSE_HEADER_ID = EEH.EXPENSE_HEADER_ID
           AND EPLT.ITEM3 = EAH.EXPENSE_HEADER_ID
           AND EPLT.BATCH_NO = I_BATCH_NO
           AND EEH.EXPENSE_TYPE <> ‘LABOR_AUTHOR‘
           AND EAH.ORG_ID = OPEN_DATA1.ORG_ID
           AND EAH.GL_DATE BETWEEN SEPV.START_DATE AND SEPV.END_DATE
           AND SEPV.PERIOD_TYPE = ‘AP‘
           AND SEPV.CLOSING_STATUS NOT IN (‘O‘, ‘F‘);
        IF V_COUNT3 <> 0 THEN
          V_MSG := V_MSG || ‘</br>‘ || V_ORG_NAME ||
                   ‘日常、加班、差旅报销导入失败存在非法期间:ORG_ID:‘ || OPEN_DATA1.ORG_ID ||
                   ‘,ERP_USER_ID:‘ || V_ERP_USER_ID || ‘非法期间数量:‘ ||
                   V_COUNT3;
          RAISE E_ERR;
        END IF;

        --初始化接口表,返回头ID
        CSYS_OUTPUT_ERP_PKG.OUTPUT_ERP_INITIALIZTION(‘APINV‘,
                                                     I_USER_ID,
                                                     ‘EXP_DAILY_TYPE_WORKFLOW‘,
                                                     V_OUTPUT_HEADER_ID,
                                                     V_MSG1);
        IF V_OUTPUT_HEADER_ID IS NULL OR V_MSG1 IS NOT NULL THEN
          V_MSG := V_MSG || ‘</br>‘ || V_ORG_NAME ||
                   ‘日常、加班、差旅报销导入失败初始化接口表错误:ORG_ID:‘ || OPEN_DATA1.ORG_ID ||
                   ‘,ERP_USER_ID:‘ || V_ERP_USER_ID || ‘原因:‘ || V_MSG1;
          RAISE E_ERR;
        END IF;

        --把职责ID记录到导入头表中,方便自动导核销时使用
        UPDATE SYS_OUTPUT_ERP_HEADERS SOEH
           SET SOEH.RESPONSBILITY_ID = V_RESPONSIBILITY_ID
         WHERE SOEH.OUTPUT_HEADER_ID = V_OUTPUT_HEADER_ID;

        --更新记账头表OUTPUT_HEADER_ID
        UPDATE EXP_ACCOUNTING_HEADERS EAHU
           SET EAHU.OUTPUT_HEADER_ID = V_OUTPUT_HEADER_ID,
               EAHU.LAST_UPDATED_BY  = I_USER_ID,
               EAHU.LAST_UPDATE_DATE = SYSDATE
         WHERE NVL(EAHU.DISABLED, 0) = 0
           AND EAHU.EXPENSE_HEADER_ID IN
               (SELECT EEH.EXPENSE_HEADER_ID
                  FROM EXP_POST_LINE_TEMP     EPLT,
                       EXP_EXPENSE_HEADERS    EEH,
                       EXP_ACCOUNTING_HEADERS EAH
                 WHERE 1 = 1
                   AND NVL(EAH.DISABLED, 0) = 0
                   AND EAH.EXPENSE_HEADER_ID = EEH.EXPENSE_HEADER_ID
                   AND EPLT.ITEM3 = EAH.EXPENSE_HEADER_ID
                   AND EPLT.BATCH_NO = I_BATCH_NO
                   AND EEH.EXPENSE_TYPE <> ‘LABOR_AUTHOR‘
                   AND EAH.ORG_ID = OPEN_DATA1.ORG_ID);
        --导入日常报销到接口表
        CSYS_OUTPUT_ERP_PKG.OUTPUT_ERP_INSERT_EXP_DATA(V_OUTPUT_HEADER_ID,
                                                       NULL,
                                                       V_MSG1);
        IF V_MSG1 IS NOT NULL THEN
          V_MSG := V_MSG || ‘</br>‘ || V_ORG_NAME ||
                   ‘日常、加班、差旅报销导入失败导入日常报销到接口表错误:ORG_ID:‘ ||
                   OPEN_DATA1.ORG_ID || ‘,ERP_USER_ID:‘ || V_ERP_USER_ID ||
                   ‘原因:‘ || V_MSG1;
          RAISE E_ERR;
        END IF;
        --更新接口表状态行
        CSYS_OUTPUT_ERP_PKG.STATE_UPDATE(V_OUTPUT_HEADER_ID,
                                         I_USER_ID,
                                         V_MSG1);
        IF V_MSG1 IS NOT NULL THEN
          V_MSG := V_MSG || ‘</br>‘ || V_ORG_NAME ||
                   ‘日常、加班、差旅报销导入失败更新接口表状态行错误:ORG_ID:‘ || OPEN_DATA1.ORG_ID ||
                   ‘,ERP_USER_ID:‘ || V_ERP_USER_ID || ‘原因:‘ || V_MSG1;
          RAISE E_ERR;
        END IF;
        --本次导入数量
        SELECT COUNT(DISTINCT EEH.EXPENSE_HEADER_ID)
          INTO V_COUNT5
          FROM EXP_POST_LINE_TEMP     EPLT,
               EXP_EXPENSE_HEADERS    EEH,
               EXP_ACCOUNTING_HEADERS EAH
         WHERE 1 = 1
           AND NVL(EAH.DISABLED, 0) = 0
           AND EAH.EXPENSE_HEADER_ID = EEH.EXPENSE_HEADER_ID
           AND EPLT.ITEM3 = EAH.EXPENSE_HEADER_ID
           AND EPLT.BATCH_NO = I_BATCH_NO
           AND EEH.EXPENSE_TYPE <> ‘LABOR_AUTHOR‘
           AND EAH.ORG_ID = OPEN_DATA1.ORG_ID
           AND EAH.ERP_UPLOAD_DATE IS NULL;
        COMMIT;
        --导入数据到EBS
        CSYS_OUTPUT_ERP_PKG.OUTPUT_AP_INV_IMP_DATA(V_OUTPUT_HEADER_ID,
                                                   V_ERP_USER_ID,
                                                   V_RESPONSIBILITY_ID,
                                                   ‘PR‘,
                                                   ‘1A2B3C4D5E6F‘,
                                                   ‘AP_INV_IMP‘,
                                                   V_INTERFACE_RUN_ID,
                                                   V_MSG1);
        IF V_MSG1 IS NOT NULL THEN
          V_MSG := V_MSG || ‘</br>‘ || V_ORG_NAME ||
                   ‘日常、加班、差旅报销导入失败导入EBS错误:ORG_ID:‘ || OPEN_DATA1.ORG_ID ||
                   ‘,ERP_USER_ID:‘ || V_ERP_USER_ID || ‘&nbsp;原因:‘ ||
                   V_MSG1;
          RAISE E_ERR;
        END IF;
        V_MSG := V_MSG || ‘</br>‘ || V_ORG_NAME || ‘&nbsp;日常、加班、差旅报销导入成功:‘ ||
                 ‘&nbsp;导入职责:‘ || V_RESPONSIBILITY_NAME || ‘&nbsp;导入数量:‘ ||
                 V_COUNT5 || ‘&nbsp;批号:‘ || V_BATCH_NUM || ‘&nbsp;请求号:‘ ||
                 V_INTERFACE_RUN_ID;
        COMMIT;
      EXCEPTION
        WHEN E_ERR THEN
          ROLLBACK;
      END;
    END LOOP;
    O_STATE := V_STATE;
    O_MSG   := V_MSG;
    BEGIN
      INSERT INTO SYS_LOG_ALL
        (SYS_LOG_ID, MODULE, PRC_FUC_MET, PURPOSE, CREATION_DATE, MSG)
      VALUES
        (SYS_LOG_ALL_S.NEXTVAL,
         ‘EXP_TO_BATCH‘,
         ‘CSYS_APPROVAL_ALL.EXP_TO_BATCH‘,
         ‘PR批量导入报销‘,
         SYSDATE,
         V_MSG);
    END;
    COMMIT;
  EXCEPTION
    WHEN E_ERR THEN
      O_STATE := V_STATE;
      O_MSG   := V_MSG;
    WHEN OTHERS THEN
      V_STATE := 1;
      V_MSG   := V_MSG || SQLCODE || SQLERRM;
      O_STATE := V_STATE;
      O_MSG   := V_MSG;
      ROLLBACK;
      BEGIN
        INSERT INTO SYS_LOG_ALL
          (SYS_LOG_ID, MODULE, PRC_FUC_MET, PURPOSE, CREATION_DATE, MSG)
        VALUES
          (SYS_LOG_ALL_S.NEXTVAL,
           ‘EXP_TO_BATCH‘,
           ‘CSYS_APPROVAL_ALL.EXP_TO_BATCH‘,
           ‘PR批量导入报销‘,
           SYSDATE,
           V_MSG);
      END;
      COMMIT;
  END EXP_TO_BATCH;

存储过程编写规范,布布扣,bubuko.com

时间: 2025-01-07 01:05:14

存储过程编写规范的相关文章

linux驱动模块编写规范以及Makefiel文件的编写规范

内核驱动模块的编写规范 驱动模块一般涉及的必用的头文件: <linux/init.h><linux/module.h><linux/kernel.h> 驱动模块的入口函数的规范: int __init entry_name(void){ /*xxx*/ return 0;} module_init(entry_name); 驱动模块的出口函数规范: void __exit exit_name(void){ } module_exit(exit_name); 模块的信息的

为什么谷歌要执行严格的代码编写规范(转)

我们在谷歌所做事情中另外一个让我感到异常有效.有用的制度是严格的编码规范. 在到Google工作之前,我一直认为编码规范没有什么用处.我坚信这些规范都是官僚制度下产生的浪费大家的编程时间.影响人们开发效率的东西. 我是大错特错了. 在谷歌,我可以查看任何的代码,进入所有谷歌的代码库,我有权查看它们.事实上,这种权限是很少人能拥有的.但是,让我感到惊讶的却是,如此多的编码规范-缩进,命名,文件结构,注释风格-这一切让我出乎意料的轻松的阅读任意一段代码,并轻易的看懂它们.这让我震惊-因为我以为这些规

20151009 C# 第一篇 程序编写规范

20151009 程序编写规范 1. 代码书写规则: 1).尽量使用接口,然后使用类实现接口. 2).关键语句写注释 3).避免写超过5个参数的方法,如果要传递多个参数,则使用结构 4).避免代码量过大的try…catch…模块 5).避免在同一个文件中放置多个类 6).switch 语句一定要有default语句处理意外情况 7).生成和构建一个长字符串时,一定要使用StringBuilder类型(可变字符序列),而不使用string 8).if 语句应该使用{}包含起来. 2. 命名规范 1

非计算机专业的码农C#学习笔记 二、C#程序编写规范

二.C#程序编写规范 1.代码书写规则: 代码书写规则呢,是相对初学者来说需要了解一下的东西.因为我们还嫩,暂时不追求什么代码审美.规范.专业还有逻辑审美这类的,不会乱成一套就好了.所以,我也不全死记烂背规则,就注意一下代码整洁这个问题.有时候,经理或者需求发布人需要我们解说一下,代码不整洁,连我们自己都找不到那可怎么办.还是记住几个: (1)记住ctrl+K+F这个快捷键,自动帮你整理选中的代码,看起来整洁吧: (2)项目时间长,分阶段写的代码最好还是#region一下,能够很好帮你回忆: (

HTML和CSS的代码编写规范

在很多开发人员眼里,编码HTML简直容易极了,编写CSS不但简单有时还会显得很繁琐-相同的属性得一个劲不停地写.为此,曾经自己也迷惑过也遇到过不少问题,但随着写&读的前端代码渐渐增多,慢慢体会到,“能写”和“会写”之间还是有一定距离的.很多时候,你可以“这样做”,但并不意味着“你应该”这么做. 合理地编写HTML和CSS,可以让代码看起来更专业.即便是很简单的几行代码,也要写的有性格.嗯~用饱含工匠精神的态度去写码,你一定会在苦逼中作乐的. 以下整理些从别人那读到学到的,同时自己认可的琐碎的点,

mysql存储过程编写-入门案例-遁地龙卷风

(-1)写在前面 这篇文章只是简要的叙述了mysql存储过程编写的基本概念. 我使用的mysql版本是5.7.9-log. 参照<<深入浅出MySQL>>. (0) delimiter // delimiter //中的//可以指定为别的符号,比如delimiter @@,改变语句的结束的标识. 因为在存储过程中用到了;,不改变默认语句结束.标识将会报错. 创建完存储过程后别忘了自己更改过默认结束标识哦! (1)存储过程的创建 在mysql命令行工具输入如下代码,当然你也可以在可视

你真的会玩SQL吗?玩爆你的数据报表之存储过程编写(下)

你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节点的方法 你真的会玩SQL吗?让人晕头转向的三值逻辑 你真的会玩SQL吗?EXISTS和IN之间的区别 你真的会玩SQL吗?无处不在的子查询 你真的会玩SQL吗?Case也疯狂 你真的会玩SQL吗?表表达式,排名函数 你真的会玩SQL吗?简单的 数据修改 你真的会玩SQL吗?你所不知道的 数据聚合

前端代码编写规范

规范的目的 前端编程人员书写前端代码遵循一定的规范.按照规范编写代码可以使代码具有统一的风格,既可以提高团队协作效率,规范文件管理,可以减小一些错误风险,也有利于项目的代码维护和后期扩展. 规范的内容 前端代码主要包括html.css和JavaScript代码,分别负责页面的结构.表现和行为,严格保证三者的分离,尽量让三者没有太多的交互和联系,这样有利于代码的维护. 前端代码编写规范主要是对这三者进行,也就是html代码编写规范.css代码编写规范和JavaScript代码编写规范.这三个编写规

浅析bootstrap插件编写规范

转载.最近学习 bootstrap  转载一下留着用. bootstrap-button.js插件是一款基于jquery的为html原生的button扩展了一些简单功能的插件,用twitter bootstrap的朋友可能再熟悉不过了,只要向button标签添加一些额外的data属性,我们就能实现点击button出现loading文字以及模拟复选和单选等功能. 下面以bootstrap-button.js的源码为实例,谈一下js插件编写的一些基本规范,笔者也是刚刚接触JS插件,权且拿这一篇,希望