Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Retornar uma variável de cursor de saída de procedimento armazenado em cx_oracle


A chamada para um procedimento recebe uma sequência como parâmetro e também retorna uma sequência.
l_test = self.__cursor.callproc("prc_get_some_data",[l_cur])
print(type(l_test))
#>>> <class 'list'>

Então você pode acessar o cursor retornado por 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]

Então você pode imprimir o resultado com um loop for
for line in ret_cursor:
    print line

ou com print ret_cursor.fetchall() , ou com o pprint ferramenta, se necessário.

Na documentação você vinculou, o valor de retorno é descompactado diretamente para l_query e l_emp :
l_query, l_emp = self.__cursor.callproc("PKG_HR.FIND_EMPLOYEES", [p_query, l_cur])

A propósito, você pode precisar fechar o cursor retornado no final, com o mesmo método do cursor principal:ret_cursor.close() . Caso contrário, pode lançar uma exceção sobre a conexão não pode ser fechada .