DM数据库的dmPython驱动运行时报 unhandled data type dmPython.CURSOR

dmPython运行报错unhandled data type dmPython.CURSOR

在这里插入图片描述
这个场景主要是dmPython调用存储过程的函数,同时返回的类型是一个Cursor类型,在dmPython中使用result_cursor = cursor.var(dmPython.CURSOR)报错导致的。

解决方案如下:
dmPython采用的是执行cursor.callproc函数后返回的变量然后根据游标的下标值去取值,需要手动释放创建的cursor变量

def call_proc_t1(object_name):
    conn = dmPython.connect(user='SYSDBA', password='123456', server='127.0.0.1', port=5236, local_code=1)
    cursor = conn.cursor()
    # 定义输出游标
    data_cursor = conn.cursor()
    # 调用包中的函数
    rets = cursor.callproc('pkg_dba_objects.get_dba_objects', [object_name,data_cursor])
    # var = rets[0].description

    # 获取游标中的数据
    result_cursor = rets[1].fetchall()  # 直接调用 fetchall() 获取所有行数据
    # 输出查询结果
    print('')
    for row in result_cursor:
        print(f"Object Name: {row[0]}, Object Type: {row[1]}, Status: {row[2]}")

    # 释放游标
    data_cursor.close()
    conn.close()

# 按装订区域中的绿色按钮以运行脚本。
if __name__ == '__main__':
    call_proc_fail('DM_TAB_2025')

在这里插入图片描述

顺带提供一个oracle的示例


import cx_Oracle

# pip install cx_Oracle --upgrade
def call_proc(object_name):
    tns = cx_Oracle.makedsn("192.168.112.160","1521","oracle")  #监听Oracle数据库

    connection = cx_Oracle.connect("SCOTT","oracle",tns)   #连接数据库
    cursor = connection.cursor()
    # 定义输出游标
    result_cursor = cursor.var(cx_Oracle.CURSOR)

    # 调用存储过程
    cursor.callproc('pkg_dba_objects.get_dba_objects', [object_name, result_cursor])

    # 获取 REF CURSOR 中的数据
    result = result_cursor.getvalue()

    # 遍历并打印查询结果
    for row in result:
        print(f"Object Name: {row[0]}, Object Type: {row[1]}, Status: {row[2]}")

    # 关闭游标和连接
    cursor.close()
    connection.close()

if __name__ == '__main__':
    call_proc('HS_USER')

更多内容需关注公众号:DM课代表。每天分享DM数据库的相关内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值