知识大全 PL/SQL中的几种异常处理方法

Posted

篇首语:不怕学问浅,就怕志气短。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 PL/SQL中的几种异常处理方法相关的知识,希望对你有一定的参考价值。

PL/SQL中的几种异常处理方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  PL/SQL里 有三种方法可以在处理大批量数据时不会因为一条或几条数据错误而导致异常中止程序      用Fetch into a cursor%TYPE把要处理的数据放到记录集里 当一条数据不符条件时 用标签<<NEXT_RECORD>>和GOTO NEXT_RECORD跳转语句使程序忽略这一条 转到下一条继续处理           Function Name : CalculateImportCharge      Function Desc : Calculate Import Charge      Created by : Author      Created Date :            FUNCTION CalculateImportCharge (         p_i_job_id IN VARCHAR         p_i_as_of_date_id IN VARCHAR ) RETURN NUMBER       AS         CURSOR cur_ShipBlHeader IS           SELECT import_folder_no           FROM GMY_SHIP_BL_HEADER           WHERE CANCEL_FLG = GMY_GA _PKG BL_CANCEL_FLG_OFF;         rec_ShipBlHeader cur_ShipBlHeader%ROWTYPE;       BEGIN         OPEN cur_ShipBlHeader;         FETCH cur_ShipBlHeader INTO rec_ShipBlHeader;         WHILE cur_ShipBlHeader%FOUND LOOP           x_num_error_code := GMY_GA _PKG CheckValidMasterBlNo (             p_i_job_id             p_i_as_of_date_id             rec_ShipBlHeader import_folder_no             x_vch_message);           IF x_num_error_code             IN (GMY_GA _PKG gn#NG GMY_GA _PKG INVALID_BL_NO) THEN             x_vch_message :=                 p_i_job_id                 || WARNING: Function CheckValidMasterBlNo @                 || Import folder                 || rec_ShipBlHeader import_folder_no                 || Invalid BL No ;             _LOG PUTLINE (p_i_job_id x_vch_message);             GOTO NEXT_RECORD;           END IF;           x_num_error_code := CheckExistsOfAccDate (             p_i_job_id             p_i_as_of_date_id             rec_ShipBlHeader import_folder_no);           IF x_num_error_code = GMY_GA _PKG gn#NG THEN             GOTO NEXT_RECORD;           END IF;           MIT;           <<NEXT_RECORD>>           FETCH cur_ShipBlHeader INTO rec_ShipBlHeader;         END LOOP;         CLOSE cur_ShipBlHeader;         RETURN GMY_GA _PKG gn#OK;       EXCEPTION         WHEN OTHERS THEN           x_vch_message :=               p_i_job_id              || ERROR: Function CalculateImportCharge @              || SUBSTR (SQLERRM (SQLCODE) );           _LOG PUTLINE (p_i_job_id x_vch_message);           RETURN GMY_GA _PKG gn#NG;     END CalculateImportCharge;      当使用the Cursor FOR Loop循环时 在Loop循环里 把会出问题的情况写进一个独立的block块中 这个块包括完整的begin end部分及exception异常处理部分 这样即使一条数据出现异常 也会继续执行下一条           Function Name : GenerateInsCostInfRec      Function Desc : Generate records to transmit in INF table      Created by : SISS(AP)      Created Date :            FUNCTION GenerateInsCostInfRec (         p_i_job_id IN VARCHAR         p_i_as_of_date_id IN VARCHAR ) RETURN NUMBER       AS         CURSOR cur_cost IS           SELECT cost ROWID costRowId               cost import_folder_no               cost insur_trans_id           FROM GMY_COST_BL cost              GMY_MON_MST mst           WHERE cost import_folder_no=invheader import_folder_no           AND cost billing_amt_num IS NOT NULL           AND cost billing_amt_num!=           AND cost insur_db_cr!= ;       BEGIN         FOR rec_cost IN cur_cost LOOP           BEGIN             x_num_ret_value := GMY_GA _PKG CheckValidMasterBlNo(                     p_i_job_id                     p_i_as_of_date_id                     rec_cost import_folder_no                     x_vch_error_msg);             IF x_num_ret_value = GMY_GA _PKG VALID_BL_NO THEN               INSERT INTO GMY_COST_INS_INF(                 cost_trx_id                 created_by                 program_name)               VALUES(                 GMY_COST_INS_INF_S NEXTVAL                 PRG_NAME                 PRG_NAME);             ELSIF x_num_ret_value = GMY_GA _PKG INVALID_BL_NO THEN               x_vch_error_msg := p_i_job_id                 || Import folder                 || rec_cost import_folder_no                 || has repeated BL No with other import folder                 || Failed in insurance cost transmission ;               _LOG PUTLINE(p_i_job_id x_vch_error_msg);             END IF;           EXCEPTION             WHEN OTHERS THEN               IF SQL%ROWCOUNT > THEN check for too many rows                 x_vch_error_msg := p_i_job_id|| ||                   SUBSTR(SQLERRM(SQLCODE) );                 _LOG PUTLINE(p_i_job_id x_vch_error_msg);               ELSE                 x_vch_error_msg := p_i_job_id|| ||                   SUBSTR(SQLERRM(SQLCODE) );                 _LOG PUTLINE(p_i_job_id x_vch_error_msg);             END IF;           END;         END LOOP;         MIT;         RETURN GMY_GA _PKG gn#OK;       EXCEPTION        WHEN OTHERS THEN          x_vch_error_msg := p_i_job_id|| ||SUBSTR(SQLERRM(SQLCODE) );          _LOG PUTLINE(p_i_job_id x_vch_error_msg);          ROLLBACK;          RETURN GMY_GA _PKG gn#NG;     END GenerateInsCostInfRec;      当使用the Cursor FOR Loop循环时 在Loop循环里 把会出问题的情况拆分成子函数 分别处理           Function Name : CopyDsToActualDs cha138/Article/program/Oracle/201311/16965

相关参考

知识大全 数据库PL/SQL异常处理(组图)

数据库PL/SQL异常处理(组图)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在设计PL/S

知识大全 PL/SQL的几个概念区别

PL/SQL的几个概念区别  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  char和varcha

知识大全 ASP.NET中处理异常的几种方式

ASP.NET中处理异常的几种方式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  程序中使用tr

知识大全 oracle光标的使用

  在PL/SQL程序中对于处理多行记录的事务经常使用光标来实现  一显式光标在PL/SQL程序中定义的光标称作显式光标  显式光标处理需四个PL/SQL步骤:  cursor 光标名称&n

知识大全 PL/SQL最差实践

PL/SQL最差实践  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  超长的PL/SQL代码  影

知识大全 PL/SQL程序结构(组图)

PL/SQL程序结构(组图)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  什么是PL/SQL程

知识大全 pl/sql查询字段为科学计数法

  从pl/sql查询字段类型为number并且长度大于位的内容显示为科学计数法的计数方法  pl/sql  从pl/sql查询字段类型为number并且长度大于位的内容显示为科学计数法的计数方法后经

知识大全 PL/SQL中用光标查询多条记录

PL/SQL中用光标查询多条记录  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  PL/SQL光标

知识大全 PL/SQL用光标查询多条记录

PL/SQL用光标查询多条记录  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  PL/SQL光标为

知识大全 全面探讨PL/SQL的复合数据类型

全面探讨PL/SQL的复合数据类型  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  PL/SQL有