存储过程返回的值是一行一行的,但每行又不是某个表的所有数据,可能是两个表的某些数据,想把数据一条一条的存放返回,该怎么弄啊!
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 ;$$
就这个存储过程想把查询结果返回,那个返回的参数怎么写?
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 ;$$
就这个存储过程想把查询结果返回,那个返回的参数怎么写?
每个SELECT语句都会得到一个结果集,之后将所有的结果集作成包返回.
若你的结果是多条记录的话,其实已经是一个包了.
( 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