python - 处理python和oracle之间异常握手的正确方法
问题描述
我有以下从 Python 调用的过程,问题是我无法看到异常出现在块中,现在为了重现我已经强制引发异常,但我无法在Python 端脚本
CREATE OR REPLACE FUNCTION mark_step
(
batch_id IN NUMBER
,request_id IN VARCHAR2
) RETURN NUMBER IS
BEGIN
INSERT INTO temp_log VALUES ('entered');
RAISE no_data_found;
return 0;
EXCEPTION
WHEN OTHERS THEN
INSERT INTO temp_log VALUES ('exception');
END mark_step;
调用此函数的客户端脚本
l_result = cur.callfunc('mark_step', cx_Oracle.STRING,
[batch_id,request_id])
print(l_result)
解决方案
该函数优雅地处理异常,并且 Python 脚本没有获得函数的任何可见性,因为在异常块上添加 Raise 失败
EXCEPTION
WHEN OTHERS THEN
INSERT INTO temp_log VALUES ('exception');
RAISE;
END mark_step;
在 Python 方面,您可以添加 try , except 块来显式处理异常,以防您还没有这样做
try:
l_result = cur.callfunc('credit_ref_mig.mark_step', cx_Oracle.STRING,
[batch_id,request_id])
print(l_result)
except as e:
print(e)
推荐阅读
- mockito - 在单元测试中传递给控制器时,FakeRequest 似乎为 Null
- javascript - D3 v4 饼图默认文本
- synchronization - Angular 5 和 Ionic 3 中的数据同步问题
- python - 如何在 Errbot 中正确设置插件的配置?
- r - 包括 R 中 Cox 回归中的时间相关协变量
- powershell - 捕获点源文件中异常的行号
- linux - 如何分析 perf sched 脚本和 perf sched 延迟?
- python - 如果我使用像 tf.layers.dense 这样的高级 API 并且没有明确定义我的权重,如何截断我的权重矩阵?
- html - css动画中的反变换
- java - 删除视图可见性上的调整大小动画 GONE