cx_Oracle:使用PL / SQL RECORD类型作为存储过程的参数 [英] cx_Oracle: Using PL/SQL RECORD types as arguments to stored procedures

查看:244
本文介绍了cx_Oracle:使用PL / SQL RECORD类型作为存储过程的参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试从cx_Oracle调用AP_VENDOR_PUB_PKG.CREATE_VENDOR(这是Oracle R12存储过程),它需要一个预定义的PL / SQL RECORD类型的参数。 (AP_VENDOR_PUB_PKG.R_VENDOR_REC_TYPE)

I'm attempting to call AP_VENDOR_PUB_PKG.CREATE_VENDOR from cx_Oracle (This is an Oracle R12 stored procedure) It requires an argument that is a predefined PL/SQL RECORD type. (AP_VENDOR_PUB_PKG.R_VENDOR_REC_TYPE)

这是我的python代码:

Here's my python code:

connection = cx_Oracle.connect(...)
cursor = connection.cursor()
obj = cursor.var(cx_Oracle.Object,                              
                              typename='AP_VENDOR_PUB_PKG.R_VENDOR_REC_TYPE')
result = cursor.callproc('AP_VENDOR_PUB_PKG.CREATE_VENDOR',
                         parameters=["1.0", "T", "T", 
                                     "fnd_api.g_valid_level_full", obj])

这将导致以下异常:

cx_Oracle.InterfaceError:与绑定变量无关的对象类型

我在做什么错?我该如何调用需要记录类型的存储过程?

What am I doing wrong? How do I call a stored procedure that requries a record type?

推荐答案

我已经可以通过使用

type_obj = connection.gettype('AP_VENDOR_PUB_PKG_R_VENDOR_RE')
obj = type_obj.newobject()

请注意,名称限制为29个字符,并且句点(。)已替换为下划线(_)

Note that the name is limited to 29 characters, and the period (.) has been replaced with underscore (_)

这篇关于cx_Oracle:使用PL / SQL RECORD类型作为存储过程的参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆