java - 从 JDBC 执行 Sybase 过程时出现问题
问题描述
从 JDBC 执行 Sybase 过程时,出现以下错误:
在包含非 SELECT 或带有 COMPUTE 子句的 SELECT 的过程上声明执行游标。为了使这个游标的声明合法,它应该有一个没有计算子句的选择语句
我正在使用 JCONN4 sybase jar。sybase 是否对程序有这样的限制,没有带有计算子句的 select 语句?
我也在 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
使用 sybStatemt.executeQuery 函数调用上述过程
看起来像它的 Sybase 错误。重现问题的步骤
如上所述,创建一个具有带有计算子句的 select 的过程
编写 jdbc 程序并使用下面的方法 statement.setFetchSize(1000);
执行程序,你会看到错误
现在的问题是 Sybase 真的有这些限制,还是只针对他们的驱动程序,我们可以说它的驱动程序问题?
解决方案
从 sybase 命令提示符运行您的 sp。如果它给出结果,它应该与 sybase 驱动程序一起使用。我在 c# 中使用过 ado.net 驱动程序,它可以运行类似的查询 https://marketplace.visualstudio.com/items?itemName=CDATASOFTWARE.SybaseADONETProvider
你的 Sp 看起来很简单。但我认为你的 sp 有一些运行时问题。
我认为这条线
if @value_date is null
select @value_date = some_column from some_table
应该
if @value_date is null
select @value_date = some_column from some_table where col1='kkk' so that only
一个价值来了
推荐阅读
- javascript - 如何让这个异步代码在这个 for 循环中运行
- php - 如何在 Yii2 中包含国家、州和城市的列表?
- java - 运行计数非重复子str操作时获取arrayindexoutofboundsexception
- facebook - 如何正式获取 Instagram 头像?
- python - 相同的关键发现值
- c++ - 从传感器获取后如何修复变量值
- sql-server - 对象名称“AMAPHLINK.Payroll.dbo.EmpResignTb”包含的前缀数量超过了最大数量。最大值为 2
- javascript - 在加载的网页顶部添加一个按钮
- java - 编写一个程序,将用户的输入作为数组接收,并将其与另一个数组进行比较,以使用 while 循环检查正确答案
- java - 从 Windows (DOS) shell 运行 Eclipse Java Maven 项目