我有两个存储过程,如下所示:
create stored procedure p1
as
select * from table1 where datediff(day, table1.[date], getdate())
create stored procedure p2
as
declare @t1 table(
ref varchar(20)
)
insert into @t1 select * from table1 where ref = 'some ref'
declare @t2 table(
fname varchar(20),
lname varchar(20),
email varchar(1000)
)
declare @len int = (select count(ref) from @t1)
while @len > 0
begin
declare @value varchar(20) = (select top 1 ref from @t1)
insert into @t2 select * from table2 where ref = @ref
delete from @t1
where ref = @value
set @len = (select count(ref) from @t1)
end
select * from @t2
Java代码
....
String query = "Execute [p2]";
try(CallableStatement cstmt = conn.prepareCall(query);
ResultSet rs = cstmt.executeQuery()){
... some code
}
表变量@ t1保留表'table1'的选择结果
变量@len保留@ t1中的行数
使用@len > 0
如while循环,我想选择从另一个表“表2”表变量记录条件@ T2持有从“表2”中选择记录
delete语句从@ t1中删除值,将@len设置为@ t1中新的行数,最后一条语句返回所有存储在@ t2中的记录
第一个过程工作正常,但是第二个过程仅在SQL Server中工作。
我在Java应用程序中收到一条错误消息
语句未返回结果集
我希望它返回查询末尾具有select语句的结果集。
请对此有办法吗?
您的[p2]存储过程需要SET NOCOUNT ON
在开始时就包含右对齐,以抑制“ n个受影响的行”的计数,因此JDBC不会混淆应放入ResultSet中的内容:
CREATE PROCEDURE p2
AS
SET NOCOUNT ON;
declare @t1 table(
ref varchar(20)
)
-- ... and so on
有关SET NOCOUNT的更多信息,请参见
有关精确地从存储过程调用返回什么的更多信息,请参见
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句