Mysql存储过程

#存储过程

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)