mysql数据库学习笔记(九)————储存过程

储存过程

语法:
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();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值