2017-06-02 57 views
0

私はoracle(lro_dummy)にカスタムタイプを持っています。私にも手続きがあります。私は次のようになります:cx_Oracle.OBJECTの値がありません

ここでは、この手順をcx_Oracleを使ってpythonから呼び出したいと思います。これは、次のようになります。そのo_dummy

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) 

は値を持っているので、

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

+0

どのような属性がprocedure_params ["o_dummy"]にリストされていますか?type.attributes? –

+0

'cx_Oracle.ObjectAttribute DUMMY'の配列を1つの項目で返します。属性 'name'の値は' DUMMY' – Lee

+0

ですので、procedure_params ["o_dummy"]でアクセスできるはずです。ダミー? –

答えて

0

を使用しています。 "ドキュメント"(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) 
関連する問題