我正在尝试使用Python和cx_Oracle从遗留的Oracle函数中读取数据。该函数的声明如下:
在ITEM_PACKAGE中:
FUNCTION get_item (p_itemName IN item.item_name%TYPE)
RETURN item%ROWTYPE;函数从项目表中返回一行,如下所示:
TABLE ITEM_SCHEMA.ITEM {
ITEM_ID NUMBER(*,0) NOT NULL,
CREATON_DATE DATE NOT NULL,
DESCRIPTION VARCHAR2(4000),
…
}我试图使用cx_Oracle按如下方式调用该函数:
return_type = connection.gettype('ITEM_SCHEMA.ITEM%ROWTYPE')
params = ['my_item_name']
cursor = connection.cursor()
result = cursor.callfunc('ASCHEMA.ITEM_PACKAGE.get_item', return_type, params)其结果是:
Exception: Varaible_TypeByPythonType(): unhandled_data_type我还尝试为ROWTYPE调用cursor.var():
return_type = cursor.var(connection.gettype('ITEM_SCHEMA.ITEM%ROWTYPE'))其结果是:
cx_Oracle.NotSupportedError: Varaible_TypeByPythonType(): unhandled_data_type有人有关于如何使用cx_Oracle调用返回%ROWTYPE的函数的示例吗?
我是cx_Oracle新手,并且成功地调用了返回简单类型(如cx_Oracle.STRING,甚至cx_Oracle.CURSOR )的存储过程,但我不知道如何处理%ROWTYPE。
编辑: saw post:Oracle:使用PL/SQL记录类型作为存储过程的参数
试着在"cx_type“上调用newobject(),没有joy。
编辑:在最初的文章中,我调用了cursor.callproc()而不是cursor.callfunc()
编辑:我看到了先知?
它说“绑定Oracle对象的能力仅在未发布(开发)版本的cx_Oracle中可用”。我现在使用的是最新的cx_oracle版本7.2.2。7.2.2版应该支持这一点吗?
发布于 2019-09-04 19:29:04
这个示例应该可以帮助您找到如何实现它。表%行类型是PL/SQL记录,因此必须作为对象处理。如果这不起作用,请提供用于调用存储过程和存储过程定义的完整代码。
https://stackoverflow.com/questions/57790318
复制相似问题