免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: echo_huang
打印 上一主题 下一主题

db2存储过程实例,请教高手帮忙 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2004-10-15 10:29 |只看该作者

db2存储过程实例,请教高手帮忙

javacool,
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;
这些我试过删掉,似乎没有问题,不清楚这几个赋值有何用途?

另外,在pl/sql里面
有这种写法,
select a1 into name,a2 into age from tab where....
不知db2是否支持?

论坛徽章:
0
12 [报告]
发表于 2004-10-15 10:40 |只看该作者

db2存储过程实例,请教高手帮忙

还有就是,在构建的时候,上面的例子程序报错
LIB.getrpt ― 构建已启动。

[SQL0199] Keyword DECLARE not expected. Valid tokens: FOR WITH FETCH ORDER UNION OPTIMIZE.

LIB.getrpt ― 构建失败。

LIB.getrpt ― 回滚成功完成。

论坛徽章:
0
13 [报告]
发表于 2004-10-15 11:23 |只看该作者

db2存储过程实例,请教高手帮忙

原帖由 "echo_huang" 发表:
javacool,
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;
..........

这个是没问题啊 这几个参数是你通过 OUT 参数返回的

后面的错误不太明白 最好吧你现在写的SP贴出来

论坛徽章:
0
14 [报告]
发表于 2004-10-15 12:00 |只看该作者

db2存储过程实例,请教高手帮忙

为了方便调试,我只用了2个sql句子。
CREATE PROCEDURE LYPLIBS.getrpt1 ( IN custno VARCHAR(,
                                   IN startdate INTEGER,
                                   IN stopdate INTEGER,
                                   OUT l3203 VARCHAR(16),
                                   OUT l1105 VARCHAR(40),
                                   OUT l3205 DECIMAL(10,2),
                                   OUT l3206 DECIMAL(10,2),
                                   OUT l0203 DECIMAL(10,2))
    RESULT SETS 2
    LANGUAGE SQL
------------------------------------------------------------------------
-- SQL 存储过程
    -- custno 客户代号
    -- startdate 初始日期
    -- stopdate 结束日期
    -- l3203 品号
    -- l1105 品名
    -- l3205 期间进货量
    -- l3206 期间出货量
------------------------------------------------------------------------
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 l0203_TMP FLOAT(5) DEFAULT 0;              

    -- 声明游标
    DECLARE cursor1 CURSOR WITH RETURN 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
       
    OPEN cursor1;       
    SET l3203 = l3203_TMP;
    SET l1105 = l1105_TMP;
    SET l3205 = l3205_TMP;
    SET l3206 = l3206_TMP;
   
            
        --2、对应该该品号求当前库存量

        DECLARE cursor2 CURSOR WITH RETURN FOR
        select 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

    open cursor2;
    SET l0203 = l0203_TMP;

   
END P1
不知道这种写法是否正确,2个sql是应该嵌套关系的。第一个查出来的l3203作为第二个sql句子的条件进行查询。

论坛徽章:
0
15 [报告]
发表于 2004-10-15 12:24 |只看该作者

db2存储过程实例,请教高手帮忙

难怪内 你的所有DECLARE语句必须在SP的 BEGIN 语句后面声明 以后才具体操作

论坛徽章:
0
16 [报告]
发表于 2004-10-15 13:06 |只看该作者

db2存储过程实例,请教高手帮忙

这样还是不行
CREATE PROCEDURE LYPLIBS.getrpt1 ( IN custno VARCHAR(,
                                   IN startdate INTEGER,
                                   IN stopdate INTEGER,
                                   OUT l3203 VARCHAR(16),
                                   OUT l1105 VARCHAR(40),
                                   OUT l3205 DECIMAL(10,2),
                                   OUT l3206 DECIMAL(10,2),
                                   OUT l0203 DECIMAL(10,2))
    RESULT SETS 2
    LANGUAGE SQL
------------------------------------------------------------------------
-- SQL 存储过程
    -- custno 客户代号
    -- startdate 初始日期
    -- stopdate 结束日期
    -- l3203 品号
    -- l1105 品名
    -- l3205 期间进货量
    -- l3206 期间出货量
------------------------------------------------------------------------
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 l0203_TMP FLOAT(5) DEFAULT 0;              

    -- 声明游标
    DECLARE cursor1 CURSOR WITH RETURN 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 WITH RETURN FOR
        select 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
               
    OPEN cursor1;
        open cursor2;
    SET l0203 = l0203_TMP;           
    SET l3203 = l3203_TMP;
    SET l1105 = l1105_TMP;
    SET l3205 = l3205_TMP;
    SET l3206 = l3206_TMP;
                
END P1

论坛徽章:
0
17 [报告]
发表于 2004-10-15 14:00 |只看该作者

db2存储过程实例,请教高手帮忙

什么错误?

论坛徽章:
0
18 [报告]
发表于 2004-10-15 14:16 |只看该作者

db2存储过程实例,请教高手帮忙

LIB.getrpt1 ― 构建已启动。

DROP SPECIFIC PROCEDURE LIB.GETRPT1

LYPLIBS.getrpt1 ― 删除 存储过程 完成。

[SQL0199] Keyword DECLARE not expected. Valid tokens: FOR WITH FETCH ORDER UNION OPTIMIZE.

LIB.getrpt1 ― 构建失败。

LIB.getrpt1 ― 回滚成功完成。

论坛徽章:
0
19 [报告]
发表于 2004-10-15 14:24 |只看该作者

db2存储过程实例,请教高手帮忙

你的cursor DELCARE 最后没加;号

论坛徽章:
0
20 [报告]
发表于 2004-10-15 14:33 |只看该作者

db2存储过程实例,请教高手帮忙

你说加哪儿?

不明白
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP