【发布时间】:2015-11-29 18:32:51
【问题描述】:
我目前是 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;
/
这是我正在查看的包体。是否有人愿意帮助我了解如何处理此脚本的错误> 当前的异常是不够的。我知道的就这么多。
感谢任何帮助。
【问题讨论】:
-
并非所有代码都在代码块中。你能再缩进一级吗?
-
我会完全删除异常处理程序。处理您实际可以处理的异常,让其余的传播到调用者。也许捕获异常,将异常记录到表中,然后重新抛出异常是有意义的。但作为第一步,我将摆脱任何您无法执行特定操作来处理特定错误的异常处理程序。
-
很抱歉,我说过我是 PLSQL 的新手。我的导师/上级要求我处理所有包中的错误,这就是其中之一。为什么这没有异常处理程序?不是所有的包都应该有异常/错误处理程序吗?
-
EXCEPTION WHEN OTHERS THEN NULL;等于“无论发生什么,都忽略它。”我认为只有在极少数情况下你才会喜欢这种行为。
标签: sql oracle plsql exception-handling toad