当前位置:网站首页>MySQL开发技巧——存储过程
MySQL开发技巧——存储过程
2022-08-01 19:08:00 【椅糖】
目录
一、任务描述
本关任务:为customers
表创建一个存储过程,使该存储过程能通过用户的信用额度来区分用户的等级。
二、相关知识
为了完成本关任务,你需要掌握:
1.存储过程的定义;
2.存储过程的创建和查询;
3.存储过程的查询和删除。
存储过程的定义
存储过程(Stored Procedure
)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。
存储过程是为了完成特定功能的 SQL
语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。
存储过程思想上很简单,就是数据库 SQL
语言层面的代码封装与重用。
简单的说存储过程就是具有名字的一段代码,用来完成一个特定的功能。
存储过程的创建和查询
创建存储过程:create procedure 存储过程名(参数)
- 下面我们来创建第一个存储过程
每个存储的程序都包含一个由 SQL
语句组成的主体。此语句可能是由以分号(;
)字符分隔的多个语句组成的复合语句。例如:
CREATE PROCEDURE proc1()
BEGIN
SELECT * FROM user;
END;
在命令行客户端中,如果有一行命令以分号结束,那么回车后,MySQL
将会执行该命令,但在创建存储过程中我们并不希望 MySQL
这么做。
MySQL
本身将分号识别为语句分隔符,因此必须临时重新定义分隔符以使 MySQL 将整个存储的程序定义传递给服务器。
要重新定义 MySQL
分隔符,请使用该 delimiter
命令。使用 delimiter
首先将结束符定义为//
,完成创建存储过程后,使用//
表示结束,然后将分隔符重新设置为分号(;
):
DELIMITER //
CREATE PROCEDURE proc1()
BEGIN
SELECT * FROM user;
END //
DELIMITER ;
注意:/
也可以换成其他符号,例如$
;
- 执行存储过程:
call 存储过程名
创建带有参数的存储过程
存储过程的参数有三种:IN
:输入参数,也是默认模式,表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回;OUT
:输出参数,该值可在存储过程内部被改变,并可返回;INOUT
:输入输出参数,调用时指定,并且可被改变和返回。
IN
参数示例:
OUT
参数示例:
INOUT
参数示例:
存储过程的查询和删除
我们如何在数据库中查询我们已经创建过的存储过程呢:
SHOW PROCEDURE STATUS WHERE db='数据库名';
查看存储过程的详细定义信息:
SHOW CREATE PROCEDURE 数据库.存储过程名;
当我们不再需要某个存储过程时,我们可以使用:
DROP PROCEDURE [IF EXISTS] 数据库名.存储过程名;
三、编程要求
根据提示,补充代码,创建存储过程GetCustomerLevel(in p_customNumber int(11),out p_customerLevel varchar(10))
,通过查询customers
表中客户的信用额度,来决定客户级别,并将客户编号和对应等级输出,具体输出内容参考测试集。
customers
表数据结构:
customerNumber | creditlimit |
---|---|
101 | 2000 |
102 | 12000 |
103 | 6000 |
等级设定:
PLATINUM (creditlim>10000)
GOLD (5000<=creditlim<=10000)
SILVER(creditlim<5000)
提示:你可能需要使用到定义变量和判断,
变量的定义和使用:
declare 变量名 类型; #定义变量
select id into 变量名 from table; #将table表中的id列值赋给变量。
SQL
中的if
和case
语法:IF expression THEN
statements;
ELSEIF elseif-expression THEN
elseif-statements;
...
ELSE
else-statements;
END IF;
CASE case-expression
WHEN when_expression_1 THEN commands
WHEN when_expression_2 THEN commands
...
ELSE commands
END CASE;
四、代码
USE mydb;
#请在此处添加实现代码
########## Begin ##########
drop procedure if exists mydb.GetCustomerLevel;
delimiter $$
create PROCEDURE GetCustomerLevel(in p_customNumber int(11),out p_customerLevel varchar(10))
Begin
declare levels int;
select creditlimit into levels from customers where customerNumber=p_customNumber;
if levels <5000 then
set p_customerLevel = 'SILVER';
elseif levels <10000 then
set p_customerLevel = 'GOLD';
else
set p_customerLevel = 'PLATINUM';
end if;
select p_customNumber as customerNumber,p_customerLevel;
End $$
delimiter ;
########## End ##########
边栏推荐
- 重保特辑|拦截99%恶意流量,揭秘WAF攻防演练最佳实践
- Keras deep learning practice - traffic sign recognition
- MySQL数据库————存储过程和函数
- Map传值
- Database Plus 的云上之旅:SphereEx 正式开源 ShardingSphere on Cloud 解决方案
- 重保特辑|筑牢第一道防线,云防火墙攻防演练最佳实践
- 首篇 NLP 领域图神经网络综述:127 页,从图构建到实际应用面面观
- explain each field introduction
- TestNG多个xml进行自动化测试
- 升哲科技携全域数字化方案亮相2022全球数字经济大会
猜你喜欢
explain 各字段介绍
C#/VB.NET: extracted from the PDF document all form
Prometheus的Recording rules实践
Zabbix6.0 DingTalk robot alarm
30分钟成为Contributor|如何多方位参与OpenHarmony开源贡献?
Source code analysis of GZIPOutputStream class
Screen: GFF, OGS, Oncell, Incell of full lamination process
明日盛会|ApacheCon Asia 2022 Pulsar 技术议题一览
屏:全贴合工艺之GFF、OGS、Oncell、Incell
From ordinary advanced to excellent test/development programmer, all the way through
随机推荐
Redis启动时提示Creating Server TCP listening socket *:6379: bind: No error
LeetCode 1374.生成每种字符都是奇数个的字符串
Database Plus 的云上之旅:SphereEx 正式开源 ShardingSphere on Cloud 解决方案
modbus bus module DAM-8082
即时通讯开发移动端弱网络优化方法总结
mysql函数的作用有哪些
【周赛复盘】LeetCode第304场单周赛
What should I do if the Win11 campus network cannot be connected?Win11 can't connect to campus network solution
Become a Contributor in 30 minutes | How to participate in OpenHarmony's open source contributions in multiple ways?
驱动上下游高效协同,跨境B2B电商平台如何释放LED产业供应链核心价值?
力扣刷题之移动零
Prometheus's Recording rules practice
Flowable-based upp (unified process platform) running performance optimization
【木棉花】#夏日挑战赛# 鸿蒙小游戏项目——数独Sudoku(3)
请你说说多线程
【蓝桥杯选拔赛真题47】Scratch潜艇游戏 少儿编程scratch蓝桥杯选拔赛真题讲解
TestNG multiple xml for automated testing
483-82 (23, 239, 450, 113)
MLX90640 Infrared Thermal Imager Temperature Measurement Module Development Notes (Complete)
Tencent Cloud Hosting Security x Lightweight Application Server | Powerful Joint Hosting Security Pratt & Whitney Version Released