存储过程返回的值是一行一行的,但每行又不是某个表的所有数据,可能是两个表的某些数据,想把数据一条一条的存放返回,该怎么弄啊!
DELIMITER $$;
DROP PROCEDURE IF EXISTS `mydata`.`GETROWNUM`$$
CREATE PROCEDURE `mydata`.`GETROWNUM` ()
BEGIN
declare mycount int;
set @mycount=0;
select (@mycount:=@mycount+1) as rownum,t01.* from t01 where t01.unitid='A1A10A1';
END$$
DELIMITER ;$$
就这个存储过程想把查询结果返回,那个返回的参数怎么写?

解决方案 »

  1.   

    为什么要一条一条的返回呢,你可以一次返回到datatable里面,一条一条的读取啊,或者一下放到数据库一个零时表里,一条一条的读取啊。
      

  2.   

    存储过程的返回结果是一个结果集包,里面是若干个结果集.
    每个SELECT语句都会得到一个结果集,之后将所有的结果集作成包返回.
    若你的结果是多条记录的话,其实已经是一个包了.
      

  3.   

    DROP PROCEDURE IF EXISTS  genseq ;CREATE PROCEDURE genseq
    ( IN  v_seqtype VARCHAR(2),
      OUT v_seqence VARCHAR(30)
    )
    /*
      标识类:
    位置(点)标识:1(业务区代码)+1(P)+4(yymm)+8(流水号)
    区域标识:1(业务区代码)+1(L)+4(yymm)+8(流水号)
    日志/代办标识:1(业务区代码)+1(B)+4(yymm)+8(流水号)
    计划标识:1(业务区代码)+1(S)+4(yymm)+8(流水号)
    网格系统客户标识:1(业务区代码)+1(D)+4(yymm)+8(流水号)
    网格系统集团/个人客户标识:1(业务区代码)+1(C)+4(yymm)+9(流水号)
    组织节点代码(组织结构):采用分级编码。
    操作员Id(客户经理):操作员工号:6(节点代码)+3(流水号)
    6位节点代码的含义:1(业务区C)+1(营业区)+1(营销单位)+3(营业厅)
    代码规则在每个表中规定
      流水类:
    业务流水号:8(YYYYMMDD)+6(HHMISS)+9(流水号)+2(业务类型)+1(业务区代码)
    业务类型:
    位置(点)类PT
    区域类LT
    日志/代办类LG
    计划类SD
    预警类WN
    网格系统客户类CT
    */
    BEGIN_PROC:
    BEGIN
      DECLARE v_seqkind   CHAR(1);        /*流水类型*/
      DECLARE v_currval   DECIMAL(14,0);  /*表中当前值*/
      DECLARE v_vallen    INT ;           /*最大长度*/
      DECLARE v_recursive CHAR(1);        /*是否重复*/
                                          /**/
      DECLARE v_currval1  DECIMAL(14,0);  /*增1后流水值 数*/
      DECLARE v_currval1S VARCHAR(30);    /*增1后流水值 串*/
      DECLARE v_tmpseq    VARCHAR(30);    /*临时流水*/
      DECLARE v_maxval    VARCHAR(14);    /*最大流水值 串*/
      DECLARE v_maxvald   DECIMAL(14,0);  /*最大流水值 数*/
      DECLARE v_currtime  VARCHAR(30);    /*当前时间 串*/
      DECLARE v_currym    CHAR(4);        /*当前年月串*/
      
      SET v_seqtype =TRIM(v_seqtype);
      SELECT 
       seqkind AS v_seqkind,
       currval AS v_currval,
       vallen AS v_val_len,
       recursive AS v_recursive 
      FROM seqinfo WHERE TRIM(seqtype) =  v_seqtype ;
      
      /*1--没有流水类型错误*/
      IF (v_seqkind IS NULL) THEN
        SELECT 1 AS ErrorCode;
        LEAVE BEGIN_PROC;
      END IF;
      
      /*计算最大序号*/
      SET v_maxval = '';
      
      WHILE  LENGTH(v_maxval)<v_vallen   do
         SET v_maxval=CONCAT(v_maxval,'9');  
        /*set v_currym =''; */
      END WHILE ;
       
      SET v_maxvald =CONVERT(v_maxval,DECIMAL(14,0));
      
      SET v_currval1=v_currval+1;
      IF (v_currval1 > v_maxvald) THEN
        IF (recursive = '1') THEN
          SET v_currval1 = 1;
        ELSE
          /*2--流水溢出错误*/
          SELECT 2 AS ErrorCode;
          LEAVE BEGIN_PROC;
        END IF;
      END IF;
      
      /*将流水转换成字符串*/
      SET v_currval1S = TRIM(CONVERT(v_currval1,CHAR(30)));
      
      
      WHILE  LENGTH(v_currval1S)<v_vallen  DO
        SET v_currval1S = CONCAT('0',v_currval1S);
      END WHILE ;
      
      /*取当期时间串*/
      SELECT DATE_FORMAT(sysdate(), '%Y%m%d%H%i%s') AS v_currtime;
      SET v_currym=SUBSTR(v_currtime,3,4);
      
      /*开始拼流水号*/
      IF (v_seqkind = '1') THEN
        SET v_seqence=CONCAT('C',v_seqtype,v_currym,v_currval1S);
      ELSE
        SET v_seqence=CONCAT(v_currtime,v_currval1S,v_seqtype,'C');
      END IF;
      
      SELECT 0 AS ErrorCode;
      
    END BEGIN_PROC