Stored procedures Jython ziclix JDBC,获取存储过程返回值链事务模式

Stored procedures Jython ziclix JDBC,获取存储过程返回值链事务模式,stored-procedures,jdbc,jython,sybase,Stored Procedures,Jdbc,Jython,Sybase,我试图获取Sybase用户定义存储过程返回的值,下面是代码片段 from com.ziclix.python.sql import zxJDBC def callStoredProc(conn, procName, *args): conn.execute("USE DB") sql = """DECLARE @ret int EXEC @ret = %s %s SELECT @ret""" % (procName, ','.

我试图获取Sybase用户定义存储过程返回的值,下面是代码片段

from com.ziclix.python.sql import zxJDBC def callStoredProc(conn, procName, *args): conn.execute("USE DB") sql = """DECLARE @ret int EXEC @ret = %s %s SELECT @ret""" % (procName, ','.join(['?'] * len(args))) return int(conn.execute(sql, args).fetchone()[0]) jdbc_url = "jdbc:sybase:Tds:192.168.1.100:3397/stagingdb" username = "sa" password = "" driver = "com.sybase.jdbc4.jdbc.SybDriver" conn = zxJDBC.connect(jdbc_url, username, password, driver) cursor = conn.cursor() print callStoredProc(cursor, "usp_find", "Apples" ) 从com.ziclix.python.sql导入zxJDBC def callStoredProc(conn,procName,*args): conn.execute(“使用数据库”) sql=“”声明@ret int EXEC@ret=%s%s 选择@ret“”“%(procName,,”。连接([“?”]*len(args))) 返回int(conn.execute(sql,args).fetchone()[0]) jdbc_url=“jdbc:sybase:Tds:192.168.1.100:3397/stagingdb” username=“sa” password=“” driver=“com.sybase.jdbc4.jdbc.SybDriver” conn=zxJDBC.connect(jdbc_url、用户名、密码、驱动程序) 游标=连接游标() 打印callStoredProc(光标“usp\U查找”、“苹果”) 但当我运行脚本时,它会说

错误:存储过程“usp_find”只能在未锁定的事务模式下运行。“SET CHAINED OFF”命令将导致当前会话使用未锁定的事务模式。[SQLCode:7713],[SQLState:ZZZZZ]

但是,如果我在
callStoredProc()
中添加
conn.execute(“SET CHAINED OFF”)
,它将返回
None


有没有办法在Jython/Python中从sybase存储过程中获取返回值?

我不知道如何更改chainde事务模式,但我希望您尝试“清除”JDBC和CallableStatemet。这样的代码看起来像(我没有Sybase,所以无法测试它):


谢谢你的提示,它成功了。我只是想为像我这样的新手多加几句台词;从java.sql import DriverManager将java.sql.Types导入为Types db=DriverManager.getConnection(“jdbc:sybase:Tds:192.168.1.100:3397/stagingdb”、“sa”和“”),然后导入几乎所有行。正确的语法将取决于用户定义的存储过程是如何编写的,在这方面,我必须稍微考虑一下我的实际问题,sp_helptext也很有帮助。
db = DriverManager.getConnection(db_url, usr, passwd)
proc = db.prepareCall("{ ? = call usp_find(?) }");
proc.registerOutParameter(1, Types.INTEGER)
proc.setString(2, "Apples");
proc.execute();
r = proc.getInt(1)
print('result: %d' % (r))