#存储过程
DELIMITER //
CREATE PROCEDURE 存储过程名(IN 输入参数名 参数类型,OUT 输出参数名 参数类型)
BEGIN
代码块
END //
DELIMITER ;
#删除存储过程:
DROP PROCEDURE IF EXISTS 存储过程名;
# 调用存储过程
CALL 存储过程名(参数1... 参数n);
# 带if 语句的存储过程
# 加薪的存储过程,传递两个参数:id、m(只能够传递正数,不能够传递负数)
SELECT '亲,您输入的金额不能为负数!!!' AS '友情提示';
DELIMITER//
CREATE PROCEDURE pro_addSalary(idd BIGINT,m FLOAT)
BEGIN
IF m>0 THEN
UPDATE users SET money=money+m WHERE id=idd;
END IF;
END//
DELIMITER;
DROP PROCEDURE IF EXISTS pro_addSalary;
CALL pro_addSalary(1,-500);
# 带if ... else 的存储过程
DELIMITER //
CREATE PROCEDURE pro_salaryAdd(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 ;
DROP PROCEDURE IF EXISTS pro_addSalary;
CALL pro_addSalary(1,-500);
#带if..else的存储过程
DROP PROCEDURE IF EXISTS pro_salaryAdd;
DELIMITER //
CREATE PROCEDURE pro_salaryAdd(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_salaryAdd(1,3000);
CALL pro_salaryAdd(1,-2000);
DELIMITER //
CREATE PROCEDURE pro_salaryAdd(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 ;
# 带if ... else if...else语句的存储过程
# 存储过程名: pro_buyCar(float money), 如果money>500万则买保时捷; 否则如果money>300万, 则买宝马, 如果money>10万,则买奥托
DROP PROCEDURE IF EXISTS pro_buyCar;
DELIMITER //
CREATE PROCEDURE pro_buyCar(money FLOAT)
BEGIN
IF money>500 THEN
SELECT '买保时捷' AS '买啥';
ELSEIF money>300 THEN
SELECT '宝马' AS '买啥';
ELSEIF money>10 THEN
SELECT '奥拓' AS '买啥';
ELSE
SELECT '摩拜' AS '骑啥';
END IF;
END//
DELIMITER ;
CALL pro_buyCar(6);
#存储过程:pro_score(score float),如果成绩>90分则是A等;
#否则score>80B等;否则如果score>=60,C等;否则score<60,不及格
#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`(3);
#存储过程名:pro_case2(i int),
#如果i=1,则拨打"爸爸"的电话,如果i=2则拨打"妈妈",否则:您打错了
DROP PROCEDURE IF EXISTS pro_case2;
DELIMITER //
CREATE PROCEDURE pro_case2(i INT)
BEGIN
CASE i
WHEN 1 THEN
SELECT '拨打father的号码' AS '给谁打电话';
WHEN 2 THEN
SELECT '拨打mother的号码' AS '给谁打电话';
ELSE
SELECT '您打错了' AS '给谁打电话';
END CASE;
END//
DELIMITER ;
CALL `pro_case2`(1);
###while循环
#Java中while循环的语法:
WHILE(条件){
循环体;
循环终止条件;
}
#存储过程名: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
SET total=total+a;
SET a=a+1;
END WHILE;
END//
DELIMITER ;
CALL `pro_while2`(100,@aaa);
SELECT @aaa;
#如果i=100则往users表中插入100条数据
DROP PROCEDURE IF EXISTS pro_while1;
DELIMITER //
CREATE PROCEDURE pro_while1(IN i INT)
BEGIN
DECLARE a INT DEFAULT 1;
WHILE a<=i DO
INSERT INTO `users` SET username='test',money=100;
SET a=a+1;
END WHILE;
END//
DELIMITER ;
CALL pro_while1(10);
SELECT COUNT(*) FROM users;
TRUNCATE TABLE users;
##loop循环:
CREATE PROCEDURE 存储过程名()
BEGIN
LOOP循环别名:LOOP
循环体;
LEAVE LOOP循环别名;
END LOOP;
END;
#-----------------------
#通过loop循环往users表中同时添加100条记录
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`();
#------------------------找出1-100之间能够被3整除的所有数之和-----------------------------
DROP PROCEDURE IF EXISTS `pro_sum`;
DELIMITER //
CREATE PROCEDURE `pro_sum`()
BEGIN
DECLARE i INT DEFAULT 1;
DECLARE total INT DEFAULT 0;
WHILE i<=10 DO
IF i MOD 3=0 THEN
SET total=total+i;
END IF;
SET i = i+1;#循环结束条件
END WHILE;
SELECT total;
END//
DELIMITER ;
CALL `pro_sum`();
#将`users`表中的所有money之和返回
SELECT SUM(money) FROM `users`;
DELIMITER //
CREATE PROCEDURE pro_qiuSum(OUT total FLOAT)
BEGIN
SELECT SUM(money) INTO total FROM `users`;
END//
DELIMITER ;
CALL pro_qiuSum(@a);
SELECT @a;
Mysql存储过程
最新推荐文章于 2023-07-05 14:13:06 发布