Chinaunix首页 | 论坛 | 博客
  • 博客访问: 829876
  • 博文数量: 247
  • 博客积分: 166
  • 博客等级: 入伍新兵
  • 技术积分: 2199
  • 用 户 组: 普通用户
  • 注册时间: 2012-11-15 16:10
文章分类

全部博文(247)

文章存档

2017年(1)

2015年(63)

2014年(80)

2013年(94)

2012年(9)

分类: Mysql/postgreSQL

2015-03-06 17:59:26

--更改命令结束符(因为在procedure中经常要用到默认的命令结束符--分号(;)
--所以在创建procedure的时候需要定义新的结束符以说明创建procedure的命令结束)
--这里将结束符号改成美元符号--$
mysql> delimiter $
--创建MySQL存储过程p3
--此存储过程的过程名是p3,该过程包含两个参数,
--一个是输入类型的(以IN标示),参数名是nameid,类型是int,
--一个是输出类型的(以OUT标示),参数名是person_name,类型是varchar(10)
--此存储过程的作用是查询出zzm表的全部内容,会输出结果集(data set),然后
--再查询表中记录的ID是nameid的字段name,将其输出到第二个输出类型的参数里面,这个查询
--不会输出结果集。

点击(此处)折叠或打开

  1. create procedure p3(IN nameid int, OUT person_name varchar(10))
  2. begin
  3. select * from test.zzm;
  4. select zzm.name into person_name from test.zzm where zzm.id = nameid;
  5. end$
调用mysql存储过程
call p3()$

例:创建存储过程并调用:
delimiter $
create procedure p12(n int)
begin
declare i int;
set i = 0;
while i < n do
set i = i + 1;
insert into test(name,age,gender) values( '小红',27,2);
end while;
select count(*) from test;
end$
call p12(10000)$

测试机器时经常要测试 inset 和 alert 的绝对值,所以写了个存储过程来完成.

点击(此处)折叠或打开

  1. DROP PROCEDURE IF EXISTS proc_buildata;
  2. tudou@Gyyx
  3. CREATE PROCEDURE proc_buildata(IN loop_times INT)
  4. BEGIN
  5. DECLARE var INT DEFAULT 0;

  6. PREPARE MSQL FROM 'CREATE TABLE IF NOT EXISTS `employee` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,`employeeid` int(10) unsigned NOT NULL COMMENT ''0'',`employeename` varchar(64) NOT NULL DEFAULT '''',PRIMARY KEY (`id`)) ENGINE=InnoDB';
  7. EXECUTE MSQL;

  8. WHILE var<loop_times DO
  9. SET var=var+1;
  10. INSERT INTO employee (employeeid,employeename) VALUES (var,CONCAT('test',var));

  11. END WHILE;
  12. END

  13. CALL proc_buildata(2000000);


  14. SELECT COUNT(1) FROM employee

参考:http://blog.csdn.net/ylqmf/article/details/7291338



阅读(849) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~