use*_*270 7 java sybase jdbc jconnect
从 JDBC 执行 Sybase 过程时,出现以下错误:
执行游标是在包含非 SELECT 或带有 COMPUTE 子句的 SELECT 的过程上声明的。为了使这个游标的声明合法,它应该有一个没有计算子句的选择语句
我正在使用 JCONN4 sybase jar。sybase 是否对程序有这样的限制,没有带有计算子句的选择语句?
我也在 Sybase 文档中搜索过,但没有得到正确的答案。
http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.39996_1250/html/svrtsg/svrtsg348.htm
我不能在这里发布程序,但我可以发布示例
create proc sample (@value_date datetime = null) as
begin
if @value_date is null
select @value_date = some_column from some_table
select a,b,c,d into #ad
from
table_a where a='something'
select a,b,c,d case when a=0 then 0 else b/a
from #ad
end
Run Code Online (Sandbox Code Playgroud)
使用 sybStatemt.executeQuery 函数调用上述过程
看起来像它的 Sybase 错误。重现问题的步骤
如上所述,创建一个使用计算子句进行选择的过程
编写jdbc程序并使用belew方法 statement.setFetchSize(1000);
执行程序,你会看到错误
现在的问题是 Sybase 真的有这些限制,还是只针对他们的驱动程序,我们可以说它的驱动程序问题?
调用存储过程时必须使用CallableStatement
如果在 CallableStatement 对象中执行将参数值表示为问号的存储过程,则比同时使用问号和文字值作为参数可以获得更好的性能。此外,如果混合文字和问号,则无法将输出参数与存储过程一起使用。
以下示例创建 sp_stmt 作为 CallableStatement 对象来执行存储过程 MyProc:
Run Code Online (Sandbox Code Playgroud)CallableStatement sp_stmt = conn.prepareCall( "{call MyProc(?,?)}");MyProc 中的两个参数用问号表示。您可以使用 CallableStatement 接口中的 registerOutParameter 方法将其中之一或两者注册为输出参数。
在以下示例中,sp_stmt2 是用于执行存储过程 MyProc2 的 CallableStatement 对象。
Run Code Online (Sandbox Code Playgroud)CallableStatement sp_stmt2 = conn.prepareCall( {"call MyProc2(?,'javelin')}");
| 归档时间: |
|
| 查看次数: |
500 次 |
| 最近记录: |