免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
11 [报告]
发表于 2004-10-15 15:22 |显示全部楼层

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

没问题啊 我用你的例子建了一遍 处;除了cursor中的语句不同以外 别的都一样 生成成功拉 下面是例子
CREATE PROCEDURE getrpt1 ( IN custno VARCHAR(16),
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 c1 cursor with return for select * from testcursor;
  declare c2 cursor with return for select * from goods;

OPEN c1;
open c2;
SET l0203 = l0203_TMP;
SET l3203 = l3203_TMP;
SET l1105 = l1105_TMP;
SET l3205 = l3205_TMP;
SET l3206 = l3206_TMP;

END P1

你最好看看SQL有没有什么问题

论坛徽章:
0
12 [报告]
发表于 2004-10-15 17:12 |显示全部楼层

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

那是你的java程序的问题 下面是处理多结果集的代码 跟上次给你的差不多 try
    {
      // prepare the CALL statement for TWO_RESULT_SETS
      String procName = "TWO_RESULT_SETS";
      String sql = "CALL " + procName + "(?, ?)";
      CallableStatement callStmt = con.prepareCall(sql);

      // set input parameter to median value passed back by OUT_PARAM
      callStmt.setDouble(1, outMedian);

      // register the output parameter
      callStmt.registerOutParameter(2, Types.INTEGER);

      // call the stored procedure
      System.out.println();
      System.out.println("Call stored procedure named " + procName);
      callStmt.execute();

      // retrieve output parameter
      int outErrorCode = callStmt.getInt(2);

      if (outErrorCode == 0)
      {
        System.out.println(procName + " completed successfully";

        System.out.println(
          "Result set 1: Employees who make more than " + outMedian);
        // get first result set
        ResultSet rs = callStmt.getResultSet();
        fetchAll(rs);

        System.out.println();
        System.out.println("Result set 2: Employees who make less than " +
                           outMedian);
        // get second result set
        callStmt.getMoreResults();
        rs = callStmt.getResultSet();
        fetchAll(rs);

        // close ResultSet
        rs.close();
      }

论坛徽章:
0
13 [报告]
发表于 2004-10-15 17:30 |显示全部楼层

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

我试了 可以返回两个结果集啊  这是我的例子直接调用SP产生的结果

D:\zhang>;db2 call getrpt1('11',2,3,?,?,?,?,?)
  输出参数的值
  --------------------------
  参数名: L3203
  参数值:

  参数名: L1105
  参数值:

  参数名: L3205
  参数值:  0.00

  参数名: L3206
  参数值:  0.00

  参数名: L0203
  参数值:  0.00


  结果集 1
  --------------

  NUM         NAME
  ----------- --------------------
          122 zhang
          990 zhang
          105 zhang
          122 zhang
          109 zhang
          350 zhang
          128 gng

  7 条记录已选择。


  结果集 2
  --------------

  GROUP       NAME
  ----------- --------------------
            1 A1
            1 A2
            1 A3
            1 A4
            1 A5

  5 条记录已选择。

  返回状态 = 0

论坛徽章:
0
14 [报告]
发表于 2004-10-16 19:26 |显示全部楼层

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

我不是说了吗 我的cursor后面接的SQL跟你的不一样 是我加上去得
如果你还有错的话 最好查查你的SQL是不是写的对
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP