sql - 如何使用 JDBC 调用带有命名参数的 Sybase 存储过程

标签 sql spring stored-procedures jdbc sap-ase

我在 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 来做这件事 JdbcTemplateSimpleJdbcCall ,但对于那些我什至无法达到我可以使用普通旧 JDBC 的地步。

总而言之,我想避免以:
{ call getFooBar(?,null,null,null,null,null,?,null,null) }

使用 JDBC 或更好的 Spring 有可能吗?

最佳答案

不是最有效的解决方案,但是,您是否尝试过将普通语句本身与 EXEC 一起使用? .
例如。String mySql = "EXEC getFooBar @Foo='FOO', @Bar='BAR'"; ResultSet rs = conn.getConnection().createStatement().executeQuery(mySql);

关于sql - 如何使用 JDBC 调用带有命名参数的 Sybase 存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20718199/

相关文章:

sql - 根据sql中的日期过滤数据

mysql - 如何优化sql select语句?

java - 非 MVC 应用程序中的 Spring 验证

java - Spring Boot 自定义运行状况指示器未显示

sql-server - 在 C# 中从数据库获取字符串值

mysql - 合并或分离表格

mysql - 在mysql中存储固定数量的项目

java - 在哪里以及如何处理 spring+hibernate 异常?

MySQL 更易读的方式来查找属于非常大的集合的列值。

从存储过程中休眠多个记录集