- 论坛徽章:
- 0
|
下面是一段伪存储过程的代码,我只是表达了我希望它实现的效果。但是因为对sql存储过程不太了解,希望各位高手帮忙看看该如何写。
数据库是db2/400的,支持sql存储过程
目的是查出一个满足条件的结果集,将结果集返回给调用它的java程序,从而生成一个报表。
代码如下:
CREATE PROCEDURE LYPLIBS.getRpt ( IN CustNo VARCHAR( ,
IN DistNo VARCHAR(6),
IN startdate INTEGER,
IN stopdate INTEGER,
OUT l3203 VARCHAR(16),
OUT l1105 VARCHAR(40),
OUT l3205 INTEGER,
OUT l3206 INTEGER,
OUT av1 FLOAT(5),
OUT sum1 INTEGER,
OUT av2 FLOAT(5),
OUT l1809 INTEGER,
OUT l32061 INTEGER )
RESULT SETS 1
LANGUAGE SQL
------------------------------------------------------------------------
-- SQL 存储过程
-- CustNo
-- DistNo
-- startdate
-- stopdate
-- l3203 品号
-- l1105 品名
-- l3205 期间进货量
-- l3206 期间出货量
-- av1 平均日出量
-- sum1 当前库存量
-- av2 周转天数
-- l1809 最近出货日
-- l32061 未出货天数
------------------------------------------------------------------------
P1: BEGIN
-- 声明变量
DECLARE l3203_TMP VARCHAR(16) DEFAULT ' ';
DECLARE l1105_TMP VARCHAR(40) DEFAULT ' ';
DECLARE l3205_TMP INTEGER DEFAULT 0;
DECLARE l3206_TMP INTEGER DEFAULT 0;
DECLARE av1_TMP FLOAT(5) DEFAULT 0;
DECLARE sum1_TMP INTEGER DEFAULT 0;
DECLARE av2_TMP FLOAT(5) DEFAULT 0;
DECLARE l1809_TMP INTEGER DEFAULT 0;
DECLARE l32061_TMP INTEGER DEFAULT 0;
-- 声明游标
--1、求出唯一的品号,期间进货量,期间出货量
DECLARE cursor1 CURSOR FOR
select ly3203,ly1105,sum(ly3205/ly1112),sum(ly3206/ly1112)
from lyplibs.lyf32,lyplibs.lyf11
where ly3230=ly1120 and ly3203=ly1101 and ly3201>;=startdate and
ly3201<=stopdate and ly3230=CustNo
group by ly3203,ly1105
--2、对应该该品号求当前库存量
DECLARE cursor2 CURSOR FOR
select ly0201,sum(ly0203/ly1112)
from lyplibs.lyf02,lyplibs.lyf03,lyplibs.lyf11
where ly0200=ly0320 and ly0200=ly1120 and ly0201=ly1101 and
ly0202 = ly0301 and ly0200 = CustNo and and ly1101 = l3203 and ly0323 = 'NM'
group by ly0201
--3、对应该品号求最近出货日
DECLARE cursor3 CURSOR FOR
select ly1806,max(ly1809)
from lyplibs.lyf18
where ly1840 = CustNo and ly1806 = l3203 and ly1809 >;= startdate and ly1809 <= stopdate
group by ly1806
--4、对应该品号求未出货天数
DECLARE cursor4 CURSOR FOR
select ly3203,count(ly3206)
from lyplibs.lyf32
where ly3230= CustNo
and ly3206 = 0 and ly3203 = l3203 and ly3201 >;= startdate and ly3201<= stopdate
group by ly3203
-- 客户机应用程序的游标未关闭
OPEN cursor1;
-- 客户机应用程序的游标未关闭
OPEN cursor2;
-- 客户机应用程序的游标未关闭
OPEN cursor3;
-- 客户机应用程序的游标未关闭
OPEN cursor4;
SET l3203 = l3203_TMP;
SET l1105 = l1105_TMP;
SET l3205 = l3205_TMP;
SET l3206 = l3206_TMP;
SET av1 = av1_TMP;
SET sum1 = sum1_TMP;
SET av2 = av2_TMP;
SET l1809 = l1809_TMP;
SET l32061 = l32061_TMP;
END P1 |
|