SQL存储过程的问题,如何使用循环?

icerlion 2014-03-11 10:53:39
遇到的问题如下:
有一张表,建表语句如下:



DROP TABLE IF EXISTS `tab_user_auth`;

CREATE TABLE `tab_user_auth` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'user id',
`user_name` varchar(64) CHARACTER SET utf8 NOT NULL COMMENT 'user name',
`user_password` varchar(64) CHARACTER SET utf8 NOT NULL COMMENT 'password of user',
`account_type` varchar(64) CHARACTER SET utf8 NOT NULL COMMENT 'account type',
`create_time` datetime NOT NULL COMMENT 'create time',
PRIMARY KEY (`id`,`user_name`),
UNIQUE KEY `id` (`id`),
UNIQUE KEY `user_name` (`user_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;


我现在想写一个存储过程,可以往tab_user_auth这张表里面插入多条测试记录。
这个存储过程接收一个参数,指明这个存储过程可以往这个表中插入多少个个记录,

大致写出来的存储过程如下:

DELIMITER $$

USE `aquarius`$$

DROP PROCEDURE IF EXISTS `sp_tab_user_auth_add_test_account`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_tab_user_auth_add_test_account`(IN _account_count INT )
BEGIN
DECLARE account_index_ INT;
SET account_index_=0;
WHILE account_index<_account_count
BEGIN
INSERT INTO `tab_user_auth`(`user_name`, `user_password`, `account_type`, `create_time`) VALUES("test" + CONVERT(account_index, VARCHAR(20)), "123456", 1, NOW());
SET account_index_=account_index_+1;
END

END$$

DELIMITER ;


可是这个存储过程语法有错误。

小弟之前没有写过存储过程,有谁知道这个sql怎么写吗?
谢谢!
...全文
146 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ACMAIN_CHM 2014-03-12
  • 打赏
  • 举报
回复
错误信息是什么? 建议一同贴出,毕竟楼主不是打算考试别人阅读程序找错的能力。
知道就是你 2014-03-12
  • 打赏
  • 举报
回复
MySQL 的CAST()和CONVERT()函数可用来获取一个类型的值,并产生另一个类型的值。两者具体的语法如下: CAST(value as type); CONVERT(value, type); 就是CAST(xxx AS 类型), CONVERT(xxx,类型)。 可以转换的类型是有限制的。这个类型可以是以下值其中的一个: 二进制,同带binary前缀的效果 : BINARY 字符型,可带参数 : CHAR() 日期 : DATE 时间: TIME 日期时间型 : DATETIME 浮点数 : DECIMAL 整数 : SIGNED 无符号整数 : UNSIGNED 没有 varchar while 循环用法大体如下: WHILE 条件判断 do ............#其他操作 end while; 另外建议:定义ps变量时 不要 使用 _ 开头或结尾 ,容易遗忘 ,建议直接使用 " ps_"开头。
icerlion 2014-03-12
  • 打赏
  • 举报
回复
谢谢各位,问题已解决。
WWWWA 2014-03-12
  • 打赏
  • 举报
回复
DELIMITER $$ DROP PROCEDURE IF EXISTS `sp_tab_user_auth_add_test_account`$$ CREATE PROCEDURE `sp_tab_user_auth_add_test_account`(IN _account_count INT ) BEGIN DECLARE account_index_ INT; SET account_index_=0; WHILE account_index<_account_count DO INSERT INTO `tab_user_auth`(`user_name`,`user_password`,`account_type`,`create_time`) VALUES(CONCAT("test",CONVERT(account_index, CHAR(20))),'123456', 1, NOW()); SET account_index_=account_index_+1; END WHILE; END$$ DELIMITER ;
benluobo 2014-03-12
  • 打赏
  • 举报
回复
前面的语法也存在问题 这里的转换也存在问题CONVERT(account_index, VARCHAR(20)), 可以写成CONVERT(account_index, CHAR(20)) 也可以写成CONCAT(account_index,'')
benluobo 2014-03-12
  • 打赏
  • 举报
回复

DELIMITER $$


DROP PROCEDURE IF EXISTS `sp_tab_user_auth_add_test_account`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_tab_user_auth_add_test_account`(IN _account_count INT )
BEGIN
	DECLARE account_index_ INT;
	SET account_index_=0;
	WHILE account_index<_account_count do
	INSERT INTO `tab_user_auth`(`user_name`, `user_password`, `account_type`, `create_time`) VALUES("test" + CONCAT(account_index, ''), "123456", 1, NOW());
	SET account_index_=account_index_+1;
	END while;
	
END$$

DELIMITER ;
WWWWA 2014-03-12
  • 打赏
  • 举报
回复
INSERT INTO `tab_user_auth`(`user_name`, `user_password`, `account_type`, `create_time`) VALUES( CONCAT("test",CONVERT(account_index, CHAR(20))), "123456", 1, NOW());
icerlion 2014-03-11
  • 打赏
  • 举报
回复
别沉了,有人知道怎么搞吗?
icerlion 2014-03-11
  • 打赏
  • 举报
回复
有大神在线吗?

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧