python - python和oracle处理异常握手的正确方法

标签 python oracle cx-oracle

我有从 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/

相关文章:

oracle - 创建返回 XML 和 JSON 的 Oracle APEX Restful 服务

python - sqlalchemy 连接失败但 cx_oracle 成功

python - 如何使用 Python cx_Oracle 从 US7ASCII Oracle 读取国家字符 (>127)?

python - PYSPARK:CX_ORACLE.InterfaceError:不是查询

python - 如何自动命名 Pandas 数据框列?

python - 具有条件规则的 Pandas Dataframe

带有集成包管理系统的 Python IDE

python - 拦截heapq

sql - 数据和信息有什么区别

oracle - JBoss 连接池的意外问题