我有从 Python 调用的以下过程,问题是我无法看到从 block 中发出的异常,为了立即复制,我已经强制引发异常,但我无法请在 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 脚本无法获得在异常 block 上添加 Raise 失败的函数的任何可见性
EXCEPTION
WHEN OTHERS THEN
INSERT INTO temp_log VALUES ('exception');
RAISE;
END mark_step;
在 Python 方面,您可以添加 try , except block 来显式处理异常,以防万一您还没有这样做
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)
关于python - python和oracle处理异常握手的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59028805/