Oracle 游標示例,帶異常處理


Oracle游標示例一則,帶異常處理。

DECLARE
        CURSOR c_dl IS
            SELECT ID, NSRSBH, WSPZXH, ZXYY_DM, HZRQ, SWJG_DM, GXSJ
              FROM T_GUOS_ZXXX
             WHERE gxsj > begin_gxsj;
        c_row c_dl%ROWTYPE;
    BEGIN
        FOR c_row IN c_dl LOOP
            BEGIN
                IF (c_row.GXSJ > max_gxsj) THEN
                    BEGIN
                        max_gxsj := c_row.GXSJ;
                    END;
                END IF;
                handled_count := handled_count + 1;
                --
                MERGE INTO T_FR_GUOSZX T
                USING (SELECT c_row.NSRSBH  NSRSBH,
                              c_row.WSPZXH  WSPZXH,
                              c_row.ZXYY_DM ZXYY_DM,
                              c_row.HZRQ    HZRQ,
                              c_row.SWJG_DM SWJG_DM,
                              c_row.GXSJ    GXSJ
                         FROM dual) NT
                ON (T.NSRSBH = NT.NSRSBH)
                WHEN MATCHED THEN
                    UPDATE
                       SET ZXWSXH = NT.WSPZXH
                WHEN NOT MATCHED THEN
                    INSERT
                        (ID, NSRSBH, ZXWSXH, ZXYY, ZXRQ, ZXJG, GXSJ)
                    VALUES
                    ...
                COMMIT;
                --當出現異常時,將異常插入日志表,並繼續下一次循環
            EXCEPTION
                WHEN OTHERS THEN
                    ROLLBACK;
                    error_count := error_count + 1;
                    errorcode   := SQLCODE;
                    errmsg      := SQLERRM;
                    BEGIN
                        --執行出錯時,將錯誤信息記錄到日志表
                 COMMIT;
                    END;
            END;
        END LOOP;
    END;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM