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

 

posted @ 2023-02-15 11:26  依羽杉  阅读(39)  评论(0)    收藏  举报