2010-04-23 14 views
7

sto cercando di farlo di nuovo un database Oracle 10:cx_Oracle e di uscita variabili

cursor = connection.cursor() 
lOutput = cursor.var(cx_Oracle.STRING) 
cursor.execute(""" 
      BEGIN 
       %(out)s := 'N'; 
      END;""", 
      {'out' : lOutput}) 
print lOutput.value 

ma mi sto

DatabaseError: ORA-01036: illegal variable name/number 

E 'possibile definire blocchi PL/SQL in cx_Oracle per di qua?

risposta

7

Sì, è possibile eseguire blocchi anonimi PL/SQL. La variabile di binding per il parametro di output non è nel formato corretto. Dovrebbe essere :out invece di %(out)s

cursor = connection.cursor() 
lOutput = cursor.var(cx_Oracle.STRING) 
cursor.execute(""" 
      BEGIN 
       :out := 'N'; 
      END;""", 
      {'out' : lOutput}) 
print lOutput 

che produce l'uscita:

<cx_Oracle.STRING with value 'N'> 
+0

Molte grazie ... ho pensato che avevamo provato quella particolare combinazione a un certo punto, ma dobbiamo avere perso! – Tim

+0

Come posso cambiarlo se uso cursor.callproc ("SOME_PROC", [lOutput]) –