sql >> Base de Datos >  >> RDS >> Oracle

Devuelve una variable de cursor de procedimiento almacenado en cx_oracle

La llamada a un procedimiento toma una secuencia como parámetro y también devuelve una secuencia.

l_test = self.__cursor.callproc("prc_get_some_data",[l_cur])
print(type(l_test))
#>>> <class 'list'>

Entonces puede acceder al cursor devuelto por índice:

ret_cursor = self.__cursor.callproc("prc_get_some_data",[l_cur])[0]

o

l_test = self.__cursor.callproc("prc_get_some_data",[l_cur])
ret_cursor = l_test[0]

Luego puede imprimir el resultado con un bucle for

for line in ret_cursor:
    print line

o con print ret_cursor.fetchall() , o con el pprint herramienta si es necesario.

En la documentación ha vinculado, el valor devuelto se descomprime directamente en l_query y l_emp :

l_query, l_emp = self.__cursor.callproc("PKG_HR.FIND_EMPLOYEES", [p_query, l_cur])

Por cierto, es posible que deba cerrar el cursor devuelto al final, con el mismo método que el cursor principal:ret_cursor.close() . De lo contrario, puede generar una excepción sobre la conexión no se puede cerrar .