mysql的学习笔记-存储过程
编写一个存储过程以计算某个雇员的年度工资总额。in参数为员工编号,out参数为年度工资总额。注意对输入的员工编号进行异常处理。
1、没有异常处理
创建表
CREATE TABLE `emp` ( `empno` int(10) DEFAULT NULL, `ename` varchar(10) COLLATE utf8_bin DEFAULT NULL, `deptno` int(5) DEFAULT NULL, `sal` int(10) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
delimiter // -- 没有分号 CREATE PROCEDURE year_sal(in empno INT,OUT yearsal INT) -- 没有分号,且输入输出的格式注意下 BEGIN SELECT sal*12 AS yearsal FROM emp WHERE empno = @empno; -- 输出的配置以及输入的引用,注意下 END; // delimiter ; CALL year_sal(10,@yearsal); -- 注意输入输出的引用
2、常见的存储过程示例
-- 如果存在则删除这个对象 drop procedure if exists p_insert_data; -- 创建一个存储过程,名字是p_insert_data create procedure p_insert_data() begin -- 定义变量 declare _name varchar(20); declare _phone varchar(11); declare _score int(11); -- 1:定义一个整型初始变量,名称是_flag declare _flag int(11); -- 2:赋予一个初始值为0 set _flag = 1; -- 3:当_flag小于等于100时,重复去插入 while _flag <=100000 do -- 名称的形式是:switchon-_flag switchon-1 switchon-2 set _name = CONCAT('switchon',_flag); set _phone = 13000000000 + _flag; set _score = rand()*100; -- 插入一条数据 insert into score(sname,phone,score) values(_name,_phone,_score); -- 循环的迭代语句,让循环在适当时候结束,避免死循环 set _flag = _flag + 1; end while; end