看來您不能使用registerOutParameter()
來讀取函數結果。取而代之的是,你可以使用的resultSet只是想:
#!/usr/bin/env jython
# -*- coding: utf8 -*-
import sys
import traceback
from java.sql import DriverManager, Types
from java.lang import Class
Class.forName("com.informix.jdbc.IfxDriver")
FUN_BODY = """CREATE FUNCTION get_ver() RETURNING VARCHAR(200);
RETURN 'ver 1.12';
END FUNCTION;"""
def test_init(db):
c = db.createStatement()
try:
c.execute('DROP FUNCTION get_ver;')
except:
pass
c.execute(FUN_BODY)
def test_call(db):
try:
print("\n\n--------------\ncall...")
proc = db.prepareCall("{ ? = call get_ver() }")
rs = proc.executeQuery()
while (rs.next()):
r = rs.getString(1)
print('result: %s' % (r))
except:
print("there were errors!")
s = traceback.format_exc()
sys.stderr.write("%s\n" % (s))
def test_exec(db):
try:
print("\n\n--------------\nEXECUTE PROCEDURE...")
c = db.createStatement()
rs = c.executeQuery("EXECUTE PROCEDURE get_ver()")
while (rs.next()):
r = rs.getString(1)
print('result: %s' % (r))
except:
print("there were errors!")
s = traceback.format_exc()
sys.stderr.write("%s\n" % (s))
def test(db_url, usr, passwd):
print("\n\n%s\n" % (db_url))
db = DriverManager.getConnection(db_url, usr, passwd)
test_init(db)
test_call(db)
test_exec(db)
db.close()
test('jdbc:informix-sqli://test-informix:9088/testifx:informixserver=ol_testifx;DB_LOCALE=pl_PL.CP1250;CLIENT_LOCALE=pl_PL.CP1250;charSet=CP1250', 'user', 'passwd')
test('jdbc:odbc:[system_dsn]', 'user', 'passwd')
我的結果:
jdbc:informix-sqli://test-informix....
--------------
call...
result: ver 1.12
--------------
EXECUTE PROCEDURE...
result: ver 1.12
這將只工作,如果你的程序有OUT參數......是這樣的:'createProductDef(產品名稱爲varchar(64 ),productdesc varchar(64),out prod_id float);'。如果你想獲得RETURN,我不能說出正確的方式,但是你可以做的就是像select一樣獲得數據的返回,就像這樣:'select * from table(my_stored_procedure);' – ceinmart
In ESQL/C,您可以在'EXECUTE PROCEDURE my_stored_procedure()'上創建一個遊標,並像在SELECT語句中那樣處理這些列。我不確定這是否適用於JDBC。 –
從你的代碼看來,應該有3個輸出參數,但我認爲應該只有一個。看到'my_stored_procedure()'主體會很好。看看有關Informix存儲過程的其他查詢:http://stackoverflow.com/questions/18536285/informix-odbc-stored-procedure-always-return-incorrect-same-value/18545274 –