【发布时间】:2021-08-17 22:59:48
【问题描述】:
我有一个包含多个过程和函数的包,这些过程是从外部程序调用的,然后它们又调用函数。
管理异常的最佳方式在哪里?
例如,Prog1 调用 Proc1,Proc1 调用 Funct1,如果在函数中出现异常(“TOO MANY ROW”或“NO DATA FOUND”),这是引发特定自定义消息并立即返回的最佳方式到 Prog1。
在这一刻我有这个
PROCEDURE_1
BEGIN
*code*
CALL FUNCTION_1
*code*
EXCEPTION
WHEN NO DATA FOUND THEN
*print customized message*
RETURN;
END;
FUNCTION_1
BEGIN
*code*
EXCEPTION
WHEN NO DATA FOUND THEN
RAISE;
END;
这是最好的方法吗?
问候, 马可
【问题讨论】:
-
when no data found then raise;没有任何意义,因为无论如何它都会这样做。在函数中完全没有异常处理会更干净。在程序中,您希望“打印自定义消息” 做什么?如果你想让调用者知道它失败了,那需要是一个使用raise_application_error的实际异常。 -
我需要创建 JSON 格式的自定义消息。我尝试使用 raise_application_error 但消息未打印在输出中
-
"没有找到数据然后引发是没有意义的;因为无论如何它都会这样做。"是的,没关系,但如果异常在函数中,程序会一直持续到结束,而我需要程序结束任何错误。
-
调用者能否检测到程序失败,并通过将错误消息替换为JSON格式的客户消息来处理异常?或者,让过程通过 OUT 参数传回状态,但过程总是报告成功完成,调用者必须检查消息文本以了解它是否真的成功。
-
我不确定您所说的是什么意思,但如果异常在函数中,则该过程将一直持续到最后,而我需要为任何错误结束该过程。如果函数因未处理的异常而失败,则该过程将在此处失败。
标签: oracle exception plsql raise