- 論壇徽章:
- 0
|
下面是一段偽存儲過程的代碼,我只是表達了我希望它實現(xiàn)的效果。但是因為對sql存儲過程不太了解,希望各位高手幫忙看看該如何寫。
數(shù)據(jù)庫是db2/400的,支持sql存儲過程
目的是查出一個滿足條件的結(jié)果集,將結(jié)果集返回給調(diào)用它的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 當(dāng)前庫存量
-- av2 周轉(zhuǎn)天數(shù)
-- l1809 最近出貨日
-- l32061 未出貨天數(shù)
------------------------------------------------------------------------
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、對應(yīng)該該品號求當(dāng)前庫存量
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、對應(yīng)該品號求最近出貨日
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、對應(yīng)該品號求未出貨天數(shù)
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
-- 客戶機應(yīng)用程序的游標未關(guān)閉
OPEN cursor1;
-- 客戶機應(yīng)用程序的游標未關(guān)閉
OPEN cursor2;
-- 客戶機應(yīng)用程序的游標未關(guān)閉
OPEN cursor3;
-- 客戶機應(yīng)用程序的游標未關(guān)閉
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 |
|