存储过程基础篇

1.存储过程的增删查 

create procedure p1()
begin 
	select count(*) from students;
end;

call  p1();

--查看
select  * 
from information_schema.ROUTINES 
where ROUTINE_SCHEMA ='student'
--查询 数据库student 中存在的存储过程

--删除p1
DROP PROCEDURE IF EXISTS p1

 注意:如果在命令行中,需要通过 delimiter 指定SQL语句 结束符

 2.系统变量的设置


-- 查看会话变量 
SHOW SESSION variables ;




-- 设置系统变量
-- 设置会话级别系统变量
SET SESSION autocommit =0;
-- 设置全局系统变量
SET GLOBALautocommit = 0;

3.用户自定义变量的设置

-- 用户自定义变量
set @myname = 'itcast';
-- 可以使用 = 号 也可以使用 :=
set @myage = 10;
set @mygender = '男', @myhobby = 'vue';  


-- 使用变量
select @myname,@myage,@mygender,@myhobby;

-- 将tb_user 的查询结果赋值给 @mycount
select count(*) into @mycount from tb_user

注意:用户定义的变量无需声明或初始化,只不过获取到的值为NULL

 3.局部变量的定义

-- 变量:局部变量
-- 声明-declare
-- 赋值 -

create procedure p2()
begin
	declare stu_count int default 0;
	select count(*) into stu_count from students;
	select stu_count;
end;

drop procedure p2

call p2()

4.IF判断

-- 根据定义的分数score变量,判定当前分数对应的分数等级,
-- 1.score >=85分,等级为优秀,
-- 等级为及格。2.score>=60分目score<85分,
-- 3.score<60分,等级为不及格。

create PROCEDURE p3()
BEGIN
-- 	创建一个成绩变量
	DECLARE score int DEFAULT 58;
	DECLARE RESULT varchar(10);

	IF score >= 85 THEN
		SET RESULT := '优秀';
	ELSEIF score >= 60 AND score <= 85 THEN 
		SET RESULT := '及格';
	ELSE 
		SET RESULT:= '不及格';
	END IF;
-- --打印结果
	SELECT RESULT;
END;

-- 执行存储过程
CALL p3()




5.参数(IN、OUT、INOUT)

类型含义备注
IN该类参数作为输入,也就是需要调用时传入值默认
OUT该类参数作为输出,也就是该参数可以作为返回值
INOUT既可以作为输入参数,也可以作为输出参数

CREATE 存储过程名称([ IN/OUT/INOUT 参数名 参数类型 ])
BEGIN
-- SQL语句
END ;


-- 传入score参数,返回result结果
CREATE  PROCEDURE p4(IN score int,OUT RESULT varchar(10))
BEGIN
-- 	创建一个成绩变量
	IF score >= 85 THEN
		SET RESULT := '优秀';
	ELSEIF score >= 60 AND score <= 85 THEN 
		SET RESULT := '及格';
	ELSE 
		SET RESULT:= '不及格';
	END IF;

END

-- 通过@result接受用户自定义变量
CALL p4(19,@result);

SELECT  @result

-- 将传入的200分制的分数进行转换,换算成百分制,然后返回分数--->INOUT
CREATE PROCEDURE p5(INOUT score double)
BEGIN
	SET score := score * 0.5;
END;

5.CASE



CREATE  PROCEDURE p6(IN month int )
BEGIN 
-- 定义一个变量
	DECLARE RESULT varchar(10);

	CASE 
		WHEN month >=1 AND MONTH <=3 THEN
		SET RESULT := '第一季度';
		WHEN month >=4 AND MONTH<=6 THEN
		SET RESULT := '第二季度';
		WHEN month >=7 AND MONTH<=9 THEN
		SET RESULT := '第三一季度';
		WHEN month >=10 AND MONTH<=12 THEN
		SET RESULT := '第四一季度';
	ELSE
		SET RESULT := '非法参数';
	END case;
	SELECT concat('输入的月份为:',month,'所属的季度是',RESULT);
END;

--执行并非传入一个值
CALL p6(2)

6.WHILE


-- 计算从1累加到n的值,n为传入的参数值。
CREATE PROCEDURE p7(IN num int)
BEGIN
   --创建变量
	DECLARE total int DEFAULT 0;
	WHILE num>0 do
		SET total := total +num;
        --每循环一次将变量的值减一,直到变量为0退出循环
		SET num := num-1;
	END WHILE;
	SELECT total;
END;

CALL p7(3)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值