【问题标题】:Value in cx_Oracle.OBJECT missingcx_Oracle.OBJECT 中的值缺失
【发布时间】:2017-06-02 18:23:33
【问题描述】:

我在 oracle (lro_dummy) 中有一个自定义类型。我也有程序。我看起来像这样:

procedure dummyLro
(
    i_dummy         in  lro_dummy,
    o_dummy         out lro_dummy
)is
begin
    o_dummy := lro_dummy('asdf');
end dummyLro;

现在我想用 cx_Oracle 从 python 调用这个过程。这看起来像这样:

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.6cx_Oracle 5.3InstantClient 11.2Oracle-Server 11

【问题讨论】:

  • procedure_params["o_dummy"].type.attributes 中列出的属性有哪些?
  • 它返回一个包含一个项目的cx_Oracle.ObjectAttribute DUMMY 数组。属性name 的值为DUMMY
  • 所以你应该可以通过procedure_params["o_dummy"].DUMMY?
  • 我知道它应该像这样工作。但我没有名为DUMMY 的属性。我拥有的唯一属性是bufferSizeinconverternumElementsoutconvertersizetype。它仅适用于特殊的 oracle 数据库吗?我的类型(lro_dummy)不正确吗?
  • 即使我尝试使用db_con.gettype("lro_dummy").newobject() 创建lro_dummy 的新对象,我得到的唯一属性是type

标签: python oracle cx-oracle object-type instantclient


【解决方案1】:

我有同样的问题。根据“文档”(http://www.oracle.com/technetwork/articles/prez-stored-proc-084100.html),它应该按照您的方式工作,但它对我不起作用。据我所知,传递给 proc 的参数没有改变。而是返回新对象。这对我有用:

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)

【讨论】:

    猜你喜欢
    • 2019-10-22
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-10
    • 2020-10-19
    相关资源
    最近更新 更多