【发布时间】:2013-12-21 10:51:22
【问题描述】:
我在 Sybase 中有一个存储过程,我可以像这样从我最喜欢的 SQL 客户端调用它:
exec getFooBar @Foo='FOO', @Bar='BAR'
它返回一个结果表,所以它就像一个查询。它实际上有很多参数,但我只想用 Foo 调用它,有时还指定 Foo 和 Bar。
Sybase 是 ASE 15.0,我使用的是 jConnect 6.0.5。
如果我只指定第一个参数,我可以使用PreparedCall 调用它:
CallableStatement cs = conn.prepareCall("{call getFooBar(?) }");
cs.setString(1,"FOO");
但是我不能使用@Foo 表示法来传递我的参数:
conn.prepareCall("{call getFooBar @Foo='FOO' }");
conn.prepareCall("call getFooBar @Foo='FOO' ");
conn.prepareCall("{call getFooBar @Foo=? }"); // + setString(1,'FOO')
在所有这些情况下,我从数据库中得到异常,告诉我 Foo 参数是预期的:
com.sybase.jdbc3.jdbc.SybSQLException: Procedure getFooBar expects
parameter @Foo, which was not supplied
理想情况下,我希望使用 Spring JdbcTemplate 或 SimpleJdbcCall 来执行此操作,但对于那些我什至无法达到使用普通旧 JDBC 的地步。
总而言之,我想避免这样结束:
{ call getFooBar(?,null,null,null,null,null,?,null,null) }
这可能使用 JDBC 或更好的 Spring 吗?
【问题讨论】:
标签: sql spring stored-procedures jdbc sap-ase