cx_Oracle.OBJECT中的值缺失
问题描述:
我在oracle(lro_dummy)中有一个自定义类型。我也有一个程序。我看起来像这样:cx_Oracle.OBJECT中的值缺失
procedure dummyLro
(
i_dummy in lro_dummy,
o_dummy out lro_dummy
)is
begin
o_dummy := lro_dummy('asdf');
end dummyLro;
现在我想从python与cx_Oracle调用此过程。这看起来是这样的:
def test(db_con):
cur = db_con.cursor()
try:
procedure_params = {}
procedure_params["i_dummy"] = cur.var(cx_Oracle.OBJECT, typename="lro_dummy")
procedure_params["o_dummy"] = cur.var(cx_Oracle.OBJECT, typename="lro_dummy")
cur.callproc("test.dummyLro", [], procedure_params)
是o_dummy
后具有价值,因为
str(procedures_params["o_dummy"])
回报
'<cx_Oracle.OBJECT with value <cx_Oracle.Object ???.LRO_DUMMY at 0x10492c9c0>>'
但我不能访问我的属性。属性在
procedure_params["o_dummy"].type.attributes
列出,但我无法找到
procedure_params["o_dummy"]
我是怎么错的价值?
我使用Python 3.6
,cx_Oracle 5.3
,InstantClient 11.2
,Oracle-Server 11
答
我有同样的问题。根据“文档”(http://www.oracle.com/technetwork/articles/prez-stored-proc-084100.html),它应该按照您的操作方式工作,但它不适用于我。据我所知,传递给proc的params没有发生变化。而是返回新的对象。这对我有用:
i_dummy = cursor.var(cx_Oracle.OBJECT, typename='lro_dummy')
o_dummy = cursor.var(cx_Oracle.OBJECT, typename='lro_dummy')
[something, returned_o_dummy] = cur.callproc("test.dummyLro", [], [i_dummy, o_dummy])
print(returned_o_dummy.DUMMY)
procedure_params [“o_dummy”] .type.attributes?中列出的属性是什么? –
它返回包含一个项目的'cx_Oracle.ObjectAttribute DUMMY'数组。 name属性的值是'DUMMY' – Lee
所以你应该可以通过procedure_params [“o_dummy”]来访问它。DUMMY? –