2010-04-23 7 views
7

Ich versuche, diese wieder auf eine Oracle-Datenbank 10 zu tun:cx_Oracle und Ausgangsvariablen

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

aber ich bin immer

DatabaseError: ORA-01036: illegal variable name/number 

Ist es möglich, PL/SQL-Blöcke in cx_Oracle zu definieren diesen Weg?

Antwort

7

Ja, Sie können anonyme PL/SQL-Blöcke erstellen. Ihre Bindevariable für den Ausgabeparameter hat nicht das richtige Format. Es sollte :out statt %(out)s

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

sein, die die Ausgabe erzeugt:

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

Vielen Dank ... Ich dachte, wir, dass bestimmte Kombination irgendwann versucht hatte, aber wir müssen es verpasst haben! – Tim

+0

Wie kann ich es ändern, wenn ich cursor.callproc ("SOME_PROC ', [lOutput]) verwende –