最近一段时间做的这个项目用的是Sybase,用到了Sybase分页。在网上找了许多,Sybase分页都是用临时表来做的。最后找到了一个存储过程,不过这个存储过程如果直接用有一些问题,所以改了一下。还有就是Sybase存储过程在和java一起用时有几个参数要设置一下。在这都做了说明,下面写把这个存储过程拿出来
create procedure dbo.getPageWiseData
(
@sqlStr varchar(8000),
@start int,
@limit int
)
as
DECLARE @dt varchar(10)
BEGIN
--# variable to hold the first row number of the page.
SELECT @dt= substring(convert(varchar, rand()), 3, 10)
SELECT @sqlStr = stuff(@sqlStr, 1, 7, 'select rownum=identity(12), ')
SELECT @sqlStr = stuff(@sqlStr, charindex(' FROM ', upper(@sqlStr)), 6 ,' into tempdb..Lining' + @dt + ' from ')
commit
execute (@sqlStr)
--# select the data with the calculated range for first and last row on page.
select @sqlStr = 'select * from tempdb..Lining' + @dt + ' where rownum > '+convert(varchar, @start)+' and rownum <= '+convert(varchar, (@start+@limit))
execute (@sqlStr)
SELECT @sqlStr = 'DROP TABLE tempdb..Lining'+@dt
EXECUTE (@sqlStr)
END
然后是设置参数,否则在java中会报错。
sp_procxmode getPageWiseData,'anymode'//对存储过程设置事务模式为anymode
use master
exec dbo.sp_dboption tempdb, 'ddl in tran', true, null//设置tempdb的ddl in tran参数为true
exec dbo.sp_dboption tempdb, 'allow nulls by default', true, null//设置tempdb的allow nulls by default参数为true
以上就是在java中调用sybase存储过程需要设置的参数。