我目前是PL / SQL的初学者,我正在学习并尝试尽可能多地吸收。我目前的任务是研究PLSQL中写入的包的错误处理。我无法理解这些软件包正在做什么以及如何处理脚本的异常/错误处理。
CREATE OR REPLACE PACKAGE BODY APMS.customer IS
PROCEDURE customer_collateral_hist(i_Vcust_cd IN customer_collateral_history.cust_cd%TYPE,
i_Vfromdate IN customer_collateral_history.reg_dttm%TYPE,
i_Vtodate IN customer_collateral_history.reg_dttm%TYPE,
i_Vauthstat IN customer_collateral_history.auth_stat%TYPE,
o_Cresultset OUT SYS_REFCURSOR)
AS
BEGIN
OPEN o_Cresultset FOR
SELECT auth_stat,
buld_size,
clos_dt,
cnfm_dt,
cnfm_tm,
cnfm_user_id,
cust_cd,
date_seq,
dbtr,
dbtr_addr,
dbtr_id,
dbtr_tel_no,
dbtr_zip_cd1,
dbtr_zip_cd2,
esta_orga,
grnt_dt_from,
grnt_dt_to,
jdg_amt,
jdg_dt,
land_size,
loc_addr,
mort_amt,
mort_chng_dt,
mort_flag,
mort_max_amt,
mort_seq,
mort_stat,
old_key,
ownr,
ownr_addr,
ownr_id,
ownr_tel_no,
ownr_zip_cd1,
ownr_zip_cd2,
prev_mort_amt,
redm_dt,
reg_dt,
reg_dttm,
reg_flag,
reg_user_id,
remark,
supr_pow_flag
FROM customer_collateral_history
WHERE cust_cd LIKE '%'||NVL(i_Vcust_cd, cust_cd)||'%'
AND TO_NUMBER(SUBSTR(reg_dttm, 1, 8)) >= NVL(i_Vfromdate, TO_NUMBER(SUBSTR(reg_dttm, 1, 8)))
AND TO_NUMBER(SUBSTR(reg_dttm, 1, 8)) <= NVL(i_Vtodate, TO_NUMBER(SUBSTR(reg_dttm, 1, 8)))
AND auth_stat LIKE '%'||NVL(i_Vauthstat, auth_stat)||'%';
EXCEPTION
WHEN OTHERS THEN
NULL;
END customer_collateral_hist;
END customer;
/
这是我正在看的包裹体。是否有人愿意帮我解决如何处理此脚本的错误&gt;目前的例外是不够的。我知道这个。
感谢任何帮助。
答案 0 :(得分:0)
EXCEPTION
WHEN OTHERS THEN
-- handle exception
OTHERS条款捕获了您尚未处理的每个例外
EXCEPTION
WHEN NO_DATA_FOUND THEN
-- handle no data found
WHEN OTHERS THEN
-- handle other exceptions
首先处理NO_DATA_FOUND,并在OTHERS情况下处理所有其他可能的异常。你可以尽可能多地处理
要定义自己的例外:
DEFINE
your_exception EXCEPTION;
BEGIN
your_queries;
RAISE your_exception
EXCEPTION
WHEN your_exception THEN
your_handle
END;
答案 1 :(得分:0)
我希望有些人可能发表评论,但如果我正在编写该程序,我根本就没有异常处理程序。
一些异常处理指针。
首先,只针对你合理期望并可以做些什么的情况使用异常处理程序。
例如,如果您正在执行SELECT..INTO
并且知道没有找到数据或行数过多,那么处理它们并编码您希望在每种情况下执行的操作。也许,在no_data_found的情况下使用默认值。
其次,如果您要做的就是记录它然后将其重新提升给调用者,请不要对WHEN OTHERS
处理程序进行编码。作为一般规则,您应该让真正的异常(那些您没有合理预期和处理的异常)传播回调用者。
编写“永不失败”的代码很容易,如果你的意思是它永远不会抛出错误。这与编写健壮的代码不同。
在您的特定情况下,没有合理的例外情况。发生任何奇怪的事都应该由调用者来处理。抓住一个你无法做任何事情的例外是没有意义的。