sql >> Databáze >  >> RDS >> Oracle

Vraťte proměnnou kurzoru uložené procedury v cx_oracle

Volání procedury bere sekvenci jako parametr a také vrací sekvenci.

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

Takže můžete přistupovat k vrácenému kurzoru pomocí indexu :

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

nebo

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

Poté můžete výsledek vytisknout pomocí cyklu for

for line in ret_cursor:
    print line

nebo pomocí print ret_cursor.fetchall() , nebo pomocí pprint nástroj v případě potřeby.

V dokumentaci jste propojili, návratová hodnota se přímo rozbalí do l_query a l_emp :

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

Mimochodem, možná budete muset zavřít vrácený kurzor na konci stejnou metodou jako hlavní kurzor:ret_cursor.close() . Jinak může vyvolat výjimku o připojení nelze uzavřít .




  1. Chyba v souboru php

  2. PostgreSQL předává data z rekurzivního CTE do funkce

  3. Zástupné znaky MySQL * a %

  4. Chyba SQL:1054, SQLState:42S22 Neznámý sloupec v 'seznamu polí' chyba Java Spring Boot Chyba Mysql