2010-04-23 33 views
7

estoy tratando de hacer esto de nuevo una base de datos Oracle 10:cx_Oracle y salida de las variables

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

Pero me estoy

DatabaseError: ORA-01036: illegal variable name/number 

¿Es posible definir bloques PL/SQL en cx_Oracle ¿de esta manera?

Respuesta

7

Sí, puede hacer bloques PL/SQL anónimos. Su variable de vinculación para el parámetro de salida no está en el formato correcto. Debe ser :out en lugar de %(out)s

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

que produce la salida:

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

Muchas gracias ... pensé que habíamos probado esa particular combinación en algún momento, sino que se ha perdido! – Tim

+0

¿Cómo puedo cambiarlo si uso cursor.callproc ("SOME_PROC", [lOutput]) –

Cuestiones relacionadas