bru*_*uno 1 plsql stored-procedures exception-handling
这是一个关于最佳实践的问题.我有一个类似于此的PL/SQL块
DECLARE
--work variables
PROCEDURE p1(in_parameter1, out_parameter1, out_parameter2...) IS
BEGIN
--do stuff
--select ( ... ) into ( ... ) from t1 where ( ... )
END;
PROCEDURE p2(in_parameter1, out_parameter1, out_parameter2...) IS
BEGIN
--do stuff
--insert/update tables
--do more stuff
END;
BEGIN -- MAIN PROCESS STARTS HERE
open c1;
fetch c1 into c1RowData;
EXIT WHEN c1%NOTFOUND
--call procedure1
--do stuff
--call procedure2
--do stuff
--do stuff
--call procedure1
--call procedure2
END;
/
EXIT;
Run Code Online (Sandbox Code Playgroud)
过程p1和p2中的语句可能会引发异常(NO_DATA_FOUND,DUP_VAL_ON_INDEX,...).
您认为处理此异常的最佳方法是什么?它们是应该在程序内处理还是你认为我应该用TRY-CATCH块围绕每个调用主体中的程序?
就个人而言,我会在他们抛出的程序中抓住他们.这意味着您可以更好地控制外部处理方式.例如,您可以将其作为用户定义的异常再次抛出,您可以使用更多有关确切错误的信息进行修饰.
'Failed to find a matching row in table a for value b'
Run Code Online (Sandbox Code Playgroud)
在程序之外比描述更具描述性
'no data found'
Run Code Online (Sandbox Code Playgroud)
但这实际上取决于:
例如,假设你想运行过程2,即使过程1中的select没有找到行.你需要在过程1中捕获异常并忽略它.如果你没有,那么它将被抛出到过程2中的异常处理程序.
或者,假设您希望过程1在select没有找到任何内容的情况下插入行,在这种情况下,您需要捕获异常并在异常处理程序中执行插入.
现在,在有人跳过我之前,我不建议你使用异常处理程序来控制代码中的执行流程,这些例子是理论上的,但希望你能得到这个想法.
| 归档时间: |
|
| 查看次数: |
2885 次 |
| 最近记录: |