Oracle
 sql >> Base de données >  >> RDS >> Oracle

Renvoie une variable de curseur de sortie de procédure stockée dans cx_oracle

L'appel à une procédure prend une séquence en paramètre, et renvoie également une séquence.

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

Vous pouvez donc accéder au curseur retourné par index :

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

ou

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

Ensuite, vous pouvez imprimer le résultat avec une boucle for

for line in ret_cursor:
    print line

ou avec print ret_cursor.fetchall() , ou avec le pprint outil si nécessaire.

Dans la documentation vous avez lié, la valeur de retour est directement décompressée dans l_query et l_emp :

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

D'ailleurs, vous devrez peut-être fermer le curseur retourné à la fin, avec la même méthode que le curseur principal :ret_cursor.close() . Sinon, il peut lever une exception à propos de la connexion ne peut pas être fermée .