Bonjour,
J'ai un petit souci qui demande des connaissances de python, de cx_oracle(pour interfacer oracle) et de PL/SQL.
J'ai des procédures stockées Oracle que j'interface avec cx_Oracle. Jusque là je n'avais pas de pb, ça marchait bien ! A présent je dois utiliser une procédure stockée qui renvoie un tableau de valeurs : cette procédure stockée est utilisée par du C et elle marche bien. Mais avec Python je ne sais pas quel type va récupérer ce tableau de valeurs.
Voici l'appel de ma procédure stockée :listret doit récupérer le tableau de valeurs : je pensais le récupérer dans une liste, mais ça le fait pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 listret = [] self.I_database.callproc("copy.CopyGetWorldAirportInRect",["XXX",listret])
Et l'interfaçage de cx_Oracle :Et enfin un extrait de la procédure PL/SQL :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 def callproc(self, proc, arg): try: self.cursor.callproc(proc, arg) except cx_Oracle.DatabaseError, oerr: raise cx_Oracle.DatabaseError, ['', "%s"%(oerr.args[0])]Le pb se situe sur le paramètre en sortie : listret car si je remplace son type par un varchar2 et que je me limite à retourner une seule valeur, ça marche bien. L'erreur signalée est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 PROCEDURE CopyGetWorldAirportInRect(this_airspace_name IN VARCHAR2,listret OUT TabTypAirportCode) IS CURSOR CurWairport IS SELECT AIRPORT_CODE,DEG_LATITUDE,MIN_LATITUDE,HEMISPHERE,SEC_LATITUDE,DEG_LONGITUDE,MIN_LONGITUDE,DIRECTION,SEC_LONGITUDE,FULL_NAME FROM w_airpor; pos BINARY_INTEGER := 0; BEGIN FOR cur IN CurWairport LOOP pos := pos + 1; listret(pos) := cur.AIRPORT_CODE; EXIT WHEN CurWairport%NOTFOUND; END LOOP; END CopyGetWorldAirportInRect;Merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part Message = proc = copy.CopyGetWorldAirportInRect, errmsg = ['', "ORA-06550: line 1, column 13:\nPLS-00222: no function with name 'COPYGETWORLDAIRPORTINRECT' exists in this scope\nORA-06550: line 1, column 7:\nPL/SQL: Statement ignored\n"]
Partager