mysql 存储过程 数组参数_mysql 存储过程 实现参数没有数组

-- 成员表

CREATE TABLE `customer` (

`id` int(11) unsigned NOT NULL COMMENT '主键',

`name` varchar(200) DEFAULT NULL COMMENT '用户名'

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 测试存储过程

create table user_profile

(

uid int auto_increment,

stuName varchar(1000) not null,

gender enum('男','女') default '男' not null,

-- gender enum('1','0') default '1' not null, -- 1为男性

score float not null,

primary key(uid)

)engine=innodb charset=utf8;

delimiter //                                             -- 声明分割符

drop procedure if exists wk;                                 -- 如果存在就删除wk

create procedure wk(var varchar(1000))                                            -- 创建存储过程

begin

declare i int DEFAULT 1;                                     -- 定义变量

while i < 11 do

insert into user_profile (uid,stuName) values (i,var);

set i = i +1;

end while;

end //

delimiter;                                                                    -- 声明分割符结束

set @var:=(select GROUP_CONCAT(id) from customer); -- 定义变量

call wk(@var);                                                                  -- 执行存储过程

select CHAR_LENGTH(@var:=(select GROUP_CONCAT(id) from customer));

select LENGTH(@var:=(select GROUP_CONCAT(id) from customer));

select count(*) from customer  -- 查询成员总数

select CHAR_LENGTH(@var:=(select GROUP_CONCAT(id) from customer))-CHAR_LENGTH(REPLACE(@var:=(select GROUP_CONCAT(id) from customer),',','')) + 1; -- 得出数组成员总数

-- 实现mysql数组

DELIMITER //

DROP PROCEDURE IF EXISTS array;

CREATE  PROCEDURE array(array_content varchar(10000))

BEGIN

SET @i=1;

SET @count=CHAR_LENGTH(array_content)-CHAR_LENGTH(REPLACE(array_content,',','')) + 1; -- 得出数组成员总数

CREATE TABLE tmp(field VARCHAR(100));  -- 创建字段表

WHILE @i <= @count DO

INSERT INTO tmp VALUES (SUBSTRING_INDEX(SUBSTRING_INDEX(array_content,',',@i),',',-1));      -- 依次插入每个成员  从左数第I个分隔符的右边全部,再从右数的第一个分隔符的左边:

SET @i=@i+1;

END WHILE;

END//

DELIMITER ;

set @var:=(select GROUP_CONCAT(id) from customer); -- 定义变量

call array(@var);

-- 游标使用循环结果集

DELIMITER //

DROP PROCEDURE IF EXISTS pro;

CREATE PROCEDURE pro(OUT param VARCHAR(1000))  -- 设置参数可以在外面访问

BEGIN

DECLARE myid INT(11);

DECLARE title VARCHAR(100);

DECLARE i INT DEFAULT 0;

DECLARE str VARCHAR(1000);

DECLARE len INT(2);

DECLARE num INT;

DECLARE cur CURSOR FOR SELECT id FROM customer;   -- 定义游标查询

SELECT COUNT(*) INTO num FROM customer;

SET str='';

OPEN cur;

WHILE i

FETCH cur INTO myid;                                                      -- 获取游标中的数据

SET str = CONCAT(str,myid,',');

SET i=i+1;

END WHILE;

SELECT LENGTH(str) INTO len;

SELECT SUBSTR(str,1,len-1) INTO param;

CLOSE cur;

END//

DELIMITER ;

-- set @var:=(select GROUP_CONCAT(id) from customer); -- 定义变量

call pro(@var);

select @var;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值