0

我正在尝试获取 Sybase 用户定义的存储过程返回的值,以下是代码片段。

从 com.ziclix.python.sql 导入 zxJDBC

def callStoredProc(conn, procName, *args):
    conn.execute("使用数据库")
    sql = """声明@ret int
             执行@ret = %s %s
             SELECT @ret""" % (procName, ','.join(['?'] * len(args)))
    返回 int(conn.execute(sql, args).fetchone()[0])

jdbc_url = "jdbc:sybase:Tds:192.168.1.100:3397/stagingdb"
用户名 = "sa"
密码 = ""
驱动程序=“com.sybase.jdbc4.jdbc.SybDriver”
conn = zxJDBC.connect(jdbc_url, 用户名, 密码, 驱动)
光标 = conn.cursor()

打印 callStoredProc(光标,“usp_find”,“苹果”)

但是当我运行脚本时,它会说;

zxJDBC.Error:存储过程“usp_find”只能在非链式事务模式下运行。'SET CHAINED OFF' 命令将导致当前会话使用非链式事务模式。[SQLCode: 7713], [SQLState: ZZZZZ]

conn.execute("SET CHAINED OFF")但是,如果我添加callStoredProc()它返回None

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

4

1 回答 1

1

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

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))
于 2013-07-03T11:12:05.553 回答