You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Oracle存储过程中使用Python变量作为动态变量

使用cx_Oracle调用Oracle存储过程并传递动态参数

核心实现代码

以下是完整的代码示例,包含数据库连接、参数传递及事务处理:

import cx_Oracle

# 定义需要传入的Python变量
V_efr = "r55"
NM = "dree"
RS = "ssyt"

# 替换为你的数据库连接信息
DB_USER = "your_username"
DB_PWD = "your_password"
DB_DSN = "your_host:your_port/your_service_name"

try:
    # 建立数据库连接
    conn = cx_Oracle.connect(DB_USER, DB_PWD, DB_DSN)
    cursor = conn.cursor()

    # 调用存储过程:按参数顺序传递
    cursor.callproc("SQURT_EN_UR", [V_efr, NM, RS])

    # 若存储过程包含输出参数,可按如下方式处理(示例)
    # output_var = cursor.var(cx_Oracle.STRING)
    # cursor.callproc("SQURT_EN_UR", [V_efr, NM, RS, output_var])
    # print("输出参数结果:", output_var.getvalue())

    # 提交事务(更新/插入操作必须提交才会生效)
    conn.commit()
    print("存储过程执行完成")

except cx_Oracle.Error as e:
    print(f"执行出错: {e}")
    # 出错时回滚事务
    if conn:
        conn.rollback()
finally:
    # 关闭资源
    if cursor:
        cursor.close()
    if conn:
        conn.close()

关键说明

  • cursor.callproc()是cx_Oracle调用存储过程的核心方法,第一个参数为存储过程名称,第二个参数是参数列表,顺序必须与存储过程定义的参数顺序完全匹配。
  • 如果存储过程包含输出参数,需先用cursor.var()定义对应类型的变量,传入参数列表后,通过getvalue()获取输出值。
  • 针对更新/插入类操作,必须调用conn.commit()提交事务,否则数据库不会持久化修改;异常场景下要执行rollback()回滚,避免脏数据。

可选:使用命名参数传递

若想避免参数顺序错误,可通过命名参数方式传递(需匹配存储过程的参数名):

cursor.callproc("SQURT_EN_UR", keywordParameters={
    "V_EFR": V_efr,
    "NM": NM,
    "RS": RS
})

注意事项

  • 确保Python变量的类型与存储过程参数类型兼容(如Oracle的VARCHAR2对应Python字符串,NUMBER对应int/float)。
  • 提前确认数据库客户端已正确配置,cx_Oracle版本与Oracle服务器版本兼容。

内容的提问来源于stack exchange,提问作者mick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 14:25:30