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

如何在Python的cx_Oracle连接中调用Oracle安全存储过程

调整后的Oracle连接与存储过程调用代码

没问题,我来帮你修改代码,实现连接后先调用指定安全存储过程的需求。核心就是在建立数据库连接之后、执行查询之前,先执行ef.applogin('1234')这个存储过程,具体实现如下:

def connect_oracle():
    import cx_Oracle
    import pandas as pd

    # 数据库连接参数
    ip = 'some_ip'
    port = 1521
    SID = 'some_SID'
    username = 'user_name'
    password = 'password'

    # 构建DSN并建立连接
    dsn_tns = cx_Oracle.makedsn(ip, port, SID)
    connection = cx_Oracle.connect(username, password, dsn_tns)

    try:
        # 创建游标对象,用于执行存储过程和SQL
        cursor = connection.cursor()
        
        # 调用安全存储过程ef.applogin,传入参数'1234'
        # callproc方法第一个参数是存储过程名,第二个是参数列表
        cursor.callproc('ef.applogin', ['1234'])
        
        # 可选:如果存储过程需要提交事务才能生效,取消下面的注释
        # connection.commit()

        # 执行查询语句
        query = "SELECT * from table_name"
        df_ora = pd.read_sql(query, con=connection)
        
    finally:
        # 关闭游标和连接,确保资源释放
        cursor.close()
        connection.close()

    return df_ora

connect_oracle()

关键改动说明:

  • 新增游标创建与存储过程调用步骤:用connection.cursor()创建游标后,通过cursor.callproc()直接调用存储过程,参数以列表形式传入
  • 添加try...finally块确保游标和连接资源被正确释放,避免资源泄漏
  • 简化了查询语句的写法(原三重引号写法也可行,这里只是更简洁)

注意事项:

  • 请确认你的数据库账号拥有执行ef.applogin存储过程的权限
  • 验证参数'1234'是该存储过程所需的正确凭证
  • 如果存储过程包含输出参数,需要在调用时传入对应变量接收(根据你的描述,这里仅需传入输入参数即可)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:14:50