2017-01-07 4 views
0

Я создал хранимую процедуру usuarios_get, я тестирую его в консоли oracle и отлично работаю. Это код хранимой процедурыКак получить параметр out (sys_refcursor) хранимой процедуры Oracle в Django

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; 

Код питон это:

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] 

Ошибка заключается в следующем:

NotSupportedError: Variable_TypeByValue(): unhandled data type VariableWrapper

Я также попытался с другой хранимой процедуры с тип номера параметра out и модификация в коде python listado = cursor.var (cx_Oracle.NUMBER) и я получаю ту же ошибку

NotSupportedError: Variable_TypeByValue(): unhandled data type VariableWrapper

Я работаю с

  • питона 2.7.12
  • Django 1.10.4
  • cx_Oracle 5.2.1
  • Oracle 12c

Может ли мне помочь с этим ?

Благодаря

ответ

0

Проблема заключается в том, что обертка Django является неполным. Таким образом, вы должны убедиться, что у вас есть «сырой» cx_Oracle курсор. Вы можете сделать это, используя следующий код:

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

Затем с помощью «сырой» курсор, чтобы создать переменную и вызвать хранимую процедуру.

Глядя на определение переменной-оболочки в Django, она также выглядит так, что вы можете получить доступ к свойству «var» на обертке. Вы также можете передать это непосредственно в хранимую процедуру, но я не знаю, является ли это лучшим долгосрочным вариантом или нет!

Смежные вопросы