2017-01-07 4 views
0

ストアドプロシージャusuarios_getを作成しました。これをoracle consoleでテストして正常に動作します。DjangoでストアドプロシージャOracleのoutパラメータ(sys_refcursor)を受け取る方法

NotSupportedError: Variable_TypeByValue(): unhandled data type VariableWrapper

私はまたして他のストアドプロシージャを試してみた:

with connection.cursor() as cursor: 
    listado = cursor.var(cx_Oracle.CURSOR) 
    l_query = cursor.callproc('usuarios_get', ('',listado)) #in this sentence produces error 
    l_results = l_query[1] 

エラーは以下の通りである。これは

create or replace PROCEDURE USUARIOS_GET(
text_search  in VARCHAR2, 
usuarios_list out sys_refcursor 
) 
AS 
--Variables 
BEGIN 
open usuarios_list for select * from USUARIO 
END USUARIOS_GET; 

Pythonのコードはこれですストアドプロシージャのコードですパラメータ番号の型を変更し、Pythonコードで修正するlistado = cursor.var(cx_Oracle.NUMBER)と同じエラーが発生する

私は

  • のpython 2.7.12
  • と連携

    NotSupportedError: Variable_TypeByValue(): unhandled data type VariableWrapper

    ジャンゴ1.10.4

  • cx_Oracle 5.2.1
  • のOracle 12cの

は、任意のこれで私を助けることができます?

ありがとう

答えて

0

問題は、Djangoのラッパーが不完全であることです。そのため、代わりにcx_Oracleの「生の」カーソルがあることを確認する必要があります。

djangoCursor = connection.cursor() 
rawCursor = djangoCursor.connection.cursor() 

次に、「生の」カーソルを使用して変数を作成し、ストアドプロシージャを呼び出すことができます。

Djangoの変数ラッパーの定義を見ると、ラッパーの "var"プロパティにアクセスできるようにも見えます。代わりにストアドプロシージャに直接渡すこともできますが、それが長期的な選択肢であるかどうかはわかりません。

関連する問題