储存过程
语法:
delimiter//
create procedure 储存过程名(in 输入参数名 参数类型,out 输出参数名,参数类型)
begin
代码块;
end//
delimiter ;
#书写一个加薪的存储过程
DELIMITER//
CREATE PROCEDURE addSalary(money FLOAT,idd BIGINT)
BEGIN
UPDATE `emp`SET salary=salary+money WHERE id=idd;
END//
DELIMITER ;
CALL addSalary(1000,1);
#调用存储过程:
call() 存储过程名(参数1…参数n)
#删除储存过程
#drop procedure 【if exists】储存过程名;
#带返回值的储存过程
#text1:传递两个float类型的形参,返回两个数的和:
DELIMITER //
CREATE PROCEDURE test1(IN i FLOAT,IN j FLOAT,OUT num FLOAT)
BEGIN
SET num=i+j;
END//
DELIMITER ;
CALL test1(10,20,@result);
SELECT @result;
带if的储存过程
#带if…else语句的存储过程:
#加薪的储存过程,传递两个参数:id,m(只能够传递整数,不能够传递负数)
DELIMITER //
CREATE PROCEDURE pro_addSalary (idd BIGINT,m FLOAT)
BEGIN
IF(m>0) THEN
UPDATE users SET money=money+m WHERE id=idd;
ELSE
SELECT '亲,您输入的金额不能够为负数!!!' AS '友情提示';
END IF;
END//
DELIMITER ;
CALL pro_addSalary(1,-500);
#带if…elseif…else语句的储存过程:
#练习题:储存过程:pro_score(score float),如果成绩>90分则是A等;
#否则score>80是B等;否则如果score>=60,C等;否则score<60,不及格
DELIMITER//
CREATE PROCEDURE pro_score(score FLOAT)
BEGIN
IF score>90 THEN
SELECT 'A' AS '成绩等级';
ELSEIF score>80 THEN
SELECT 'B' AS '成绩等级';
ELSEIF score>=60 THEN
SELECT 'C' AS '成绩等级';
ELSE
SELECT '不及格' AS '成绩等级';
END IF;
END//
DELIMITER ;
CALL pro_score(50);
case选择分支结构
#储存过程名:pro_case(i,int)如果i=1则打印星期一,如果i=2则打印星期二...
DELIMITER//
CREATE PROCEDURE pro_case(i INT)
BEGIN
CASE i
WHEN 1 THEN
SELECT '星期一' AS '日期';
WHEN 2 THEN
SELECT '星期二' AS '日期';
ELSE
SELECT '今天不是周一或者周二' AS '日期';
END CASE;
END//
DELIMITER ;
CALL pro_case(2);
#case练习:储存过程名pro_case2(i,int)
#如果i=1,则拨打“爸爸”的电话,如果i=2则拨打”妈妈“的电话,否则:您打错了
DELIMITER//
CREATE PROCEDURE pro_case2(i INT)
BEGIN
CASE i
WHEN 1 THEN
SELECT '拨打mother的电话';
WHEN 2 THEN
SELECT '拨打father的电话';
ELSE
SELECT '您打错了';
END CASE;
END//
DELIMITER ;
CALL pro_case2(3);
while循环
#储存过程名:pro_while(i int),如果i=100,则计算1到100之间的所有数之和,返回最终结果
#同时往users表中插入100条数据
DROP PROCEDURE pro_while;
DELIMITER//
CREATE PROCEDURE pro_while(IN i INT)
BEGIN
DECLARE a INT DEFAULT 1; #定义整型变量a并赋值1
#若先声明再赋值,则declare a int;set a=1;
WHILE a<=i DO
INSERT INTO users SET username='text',money=100;
SET a=a+1;
END WHILE;
END//
DELIMITER ;
CALL pro_while(10);
#存储过程名:pro_while2(i,int),如果i=100,则计算1到100之间的所有数的和,返回最终结果
DELIMITER//
CREATE PROCEDURE pro_while2(IN i INT,OUT total INT)
BEGIN
DECLARE a INT DEFAULT 1;
SET total=0;
WHILE a<=i DO
INSERT INTO users SET username='text',money=100;
SET total=total+a;
SET a=a+1;
END WHILE;
END//
DELIMITER ;
CALL pro_while2(100,@result);
SELECT @result;
LOOP循环
语法:
create procedure 储存过程名()
begin
loop循环名:loop
循环体;
.
leave loop 循环别名;
end loop;
end
#通过loop循环往users表中同时添加100条记录,当数据添加到21条时循环终止
DELIMITER //
CREATE PROCEDURE pro_loop()
BEGIN
DECLARE i INT DEFAULT 0;
loop_test1:LOOP
INSERT INTO users SET username='admin',money=200;
SET i=i+1;
IF i=100 THEN
LEAVE loop_test1;
END IF;
END LOOP;
END//
DELIMITER ;
CALL pro_loop();