最近做一个报表程序,经常要在DB2中查询若干庞大的表的数据并执行一些计算,再返回给WEB端显示。之前的做法是,在java程序里根据条件拼接SQL语句,然后直接用拼接好的SQL语句查询数据库,一句SQL的长度甚至都到几K个字母的长度,加上大量的选择判断条件,可想而知,查询的过程非常缓慢,一般都在30s以上。
据说调用存储过程会比SQL直接查询效率高,为了改善这样低下的查询效率,这几天强迫自己研究了一下DB2中的存储过程。因为之前从未了解过存储过程,所以几天时间下来,还是走了很多的弯路,不过总算有些收获。
下面结合这几天实践的例子说明。
NO.1、创建一个生成临时表的存储过程。
create procedure yourlib.java_bi_03(in yyyymm integer,in dwdm varchar(2))
--注释一行用2个减号表示,注释一段用/*...*/表示,yourlib是库名,java_bi_03是存储过程名,yyyymm是输入的整形参数,dwdm是输入的长度为2的字符型参数
language sql
p1:begin
declare detail varchar(5000); --定义字符型变量,必须指定长度
declare timevalue integer; --定义整形变量
set timevalue = yyyymm * 100 + 0; --对变量赋值均用set语句
if dwdm <> '' then --程序里可以直接使用传入的参数
set detail =