MySQL~存储过程基本操作
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQL~存储过程基本操作,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5420字,纯文字阅读大概需要8分钟。
内容图文
![MySQL~存储过程基本操作](/upload/InfoBanner/zyjiaocheng/446/e76e62a203634fd19b23b8192d8ad3a9.jpg)
声明sql语句的分隔符,默认情况下是
;
CREATE PROCEDURE
p()
BEGIN
SELECT
‘hello procedure‘;
END$
call
p()
-- ----------------- 注释符后空一格
delimiter $
CREATE PROCEDURE
process_01()
BEGIN
DECLARE nickname
VARCHAR(18) DEFAULT(‘大哥哥‘); -- 声明变量,默认值为‘大哥哥’
SET nickname
= ‘小弟弟‘; -- 直接赋值
SELECT nickname
;
END$
DROP PROCEDURE process_01
; -- 删除该存储过程
CALL
process_01() -- 调用该存储过程
-- INTO
------------------
delimiter $
CREATE PROCEDURE
process_02()
BEGIN
DECLARE num
int;
SELECT
COUNT(*) INTO num FROM sinfo
; -- INTO 将SELECT
COUNT(*) FROM sinfo
;的查询结果传递给num
SELECT
CONCAT(‘sinfo表中的元组数为 ‘, num
);
END$
DROP PROCEDURE process_02
;
call process_02
-- ------------------
delimiter $
CREATE PROCEDURE
process_03()
BEGIN
SET
@nickname = ‘小弟弟‘;
END$
DROP PROCEDURE process_03
;
call process_03
SELECT
@nickname;
-- ---------------------
-- IN 该参数可作为输入
-- OUT 该参数可作为输出
-- INOUT 即可输入也可输出
delimiter $
CREATE PROCEDURE
process_04(in height
int)
BEGIN
DECLARE description
VARCHAR(30) DEFAULT(‘没身高‘);
if height
>= 180 then
set description
= ‘身材高挑‘;
elseif height
>= 170 and height
< 180 then
-- 注意elseif不能分开
set description
= ‘标准身材‘;
else
set description
= ‘一般身材‘;
end
if; -- 结束
if
SELECT height
;
SELECT description
;
END$
DROP PROCEDURE process_04
;
call
process_04(190); -- 调用时传入
call
process_04(170);
call
process_04(160);
-- if语句
-------------------
-- IN 该参数可作为输入
-- OUT 该参数可作为输出
-- INOUT 即可输入也可输出
delimiter $
CREATE PROCEDURE
process_05(inout height
int, out description
VARCHAR(12) )
BEGIN
if height
>= 180 then
set description
= ‘身材高挑‘;
elseif height
>= 170 and height
< 180 then
set description
= ‘标准身材‘;
else
set description
= ‘一般身材‘;
set height
= 172; -- 长高了
,使用inout将传递这个值出来
set description
= ‘标准身材‘;
end
if; --
END$
DROP PROCEDURE process_05
;
set
@height = 190;
call
process_05(@height,@description); -- @description 用户会话变量,代表整个会话过程都有用,类似全局变量
SELECT
@height; -- @
@description 系统变量
SELECT
@description;
set
@height = 170;
call
process_05(@height,@description);
SELECT
@height;
SELECT
@description;
set
@height = 160;
call
process_05(@height,@description);
SELECT
@height;
SELECT
@description;
-- CASE语句
-----------------
delimiter $
CREATE PROCEDURE
process_06(mon
int)
BEGIN
DECLARE result
VARCHAR(10);
CASE
WHEN mon
>=1 and mon
<=3 THEN
set result
= ‘第一季度‘;
WHEN mon
>=4 and mon
<=6 THEN
set result
= ‘第二季度‘;
WHEN mon
>=7 and mon
<=9 THEN
set result
= ‘第三季度‘;
ELSE
set result
= ‘第四季度‘;
END CASE
;
SELECT
CONCAT(‘传递的月份为 ‘,mon
,‘所属季度是 ‘,result
);
end$
call
process_06(7);
-- while循环
------------- 不满足条件则退出循环
delimiter $
CREATE PROCEDURE
process_07(n
int)
BEGIN
DECLARE total
int DEFAULT
0;
DECLARE num
int DEFAULT
1;
WHILE num
<= n DO
-- 累加
1~n的值
set total
= total
+ num
;
set num
= num
+ 1;
END WHILE
;
SELECT
CONCAT(‘累计后的值为 ‘,total
);
end$
DROP PROCEDURE process_07
;
call
process_07(10);
-- repeat循环
---------------- 满足条件则退出循环
delimiter $
CREATE PROCEDURE
process_08(n
int)
BEGIN
DECLARE total
int DEFAULT
0;
REPEAT
set total
= total
+ n
;
set n
= n
-1;
UNTIL n
= 0 END REPEAT
; -- 满足条件则退出循环
SELECT
CONCAT(‘累计后的值为 ‘,total
);
end$
DROP PROCEDURE process_08
;
call
process_08(10);
-- loop语句
-------------- 使用leave语句推出循环
delimiter $
CREATE PROCEDURE
process_09(n
int)
BEGIN
DECLARE total
int DEFAULT
0;
c
:loop
set total
= total
+ n
;
set n
= n
-1;
if n
<=0 then
LEAVE c
; -- 使用leave语句推出循环
end
if;
end loop c
;
SELECT
CONCAT(‘累计后的值为 ‘,total
);
end$
DROP PROCEDURE process_09
;
call
process_09(10);
-- 游标
------------------
-- 用来存储查询结果集的数据类型,在存储过程和函数中可以使用光标对结果集进行循环的处理。
-- 光标的使用包括光标的声明、OPEN、FETCH和CLOSE,其语法分别如下。
delimiter $
CREATE PROCEDURE
process_10()
BEGIN
DECLARE sinfo_name
VARCHAR(12); -- 定义接收变量
DECLARE sinfo_number
int;
DECLARE num
int DEFAULT(1);
DECLARE n
int DEFAULT(0);
DECLARE sinfo_result CURSOR
for SELECT
* from sinfo
; -- 定义游标
SELECT
COUNT(*) INTO num FROM sinfo
;
open sinfo_result
; -- 打开游标
c
: LOOP
FETCH sinfo_result into sinfo_name
,sinfo_number
;
SELECT
CONCAT(‘name:‘,sinfo_name
,‘ number:‘,sinfo_number
);
set n
= n
+ 1;
IF n
>= num THEN
LEAVE c
;
END IF
;
END LOOP c
;
CLOSE sinfo_result
; -- 关闭游标
end$
DROP PROCEDURE process_10
;
call
process_10();
-- <--- fetch 每fetch一次执行下一行
-- 吕布
20 |
-- ddd
21 |
-- aaa
21 \
|/
-- n
7
-- hh
12
-- 韩信
1
-- 王老五
123
-- 存储函数
-----------------
SET GLOBAL log_bin_trust_function_creators
= 1; --下方单独一个存储函数无法运行,需设置,下方链接为原因
delimiter $
create FUNCTION
fun1(num
int)
RETURNS
int
BEGIN
DECLARE sum
int DEFAULT(0);
SELECT
COUNT(*) INTO sum FROM sinfo where number
= num
;
return sum
;
end$
drop FUNCTION fun1
;
SELECT
fun1(21);
链接:
[https://blog.csdn.net/maweiba163/article/details/51895323]
MySQL~存储过程基本操作
标签:else result color web org art Fix mys declare
本文系统来源:https://www.cnblogs.com/phyger/p/14060919.html
内容总结
以上是互联网集市为您收集整理的MySQL~存储过程基本操作全部内容,希望文章能够帮你解决MySQL~存储过程基本操作所遇到的程序开发问题。
如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
来源:【匿名】