2010-04-23 127 views
7

我试图做到这一点又一个Oracle数据库10:cx_Oracle和输出变量

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

,但我发现

DatabaseError: ORA-01036: illegal variable name/number 

是否有可能在cx_Oracle定义PL/SQL块这条路?

回答

7

是的,你可以做匿名PL/SQL块。输出参数的绑定变量格式不正确。它应该是:out而不是%(out)s

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

它产生的输出:

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

非常感谢......我认为我们会尝试,在某些时候特定组合,但我们必须都少不了它! – Tim 2010-04-23 15:54:21

+0

如何使用cursor.callproc(“SOME_PROC”,[lOutput])如何更改它 – 2016-04-08 15:50:05