《Mysql数据库应用》 第2版 郭文明 实验5 存储过程与函数的构建与使用核心操作与思路解析

【实验5-1】创建存储过程

(1)创建一登录的存储过程,输入参数为会员账户和会员密码,如果在Client表中能够找到,则输出"登录成功",否则输出"账户或者密码不对"。

sql 复制代码
CREATE PROCEDURE login(in client_cid int,in client_password char(10))
BEGIN
declare a char(10);
select `password` into a from client where cid=client_cid and `password`=client_password;
if a then
	set a="登录成功";
else
	set a="账户或者密码不对";
end if;
select a;
END

(2)创建一修改汽车配件信息的存储过程,用于后台管理人员对已有的某汽车配件进行促销管理,输入参数为汽车配件编号、价格;当价格小于'现在价格'时,将'原始价格'改为'现在价格',将'现在价格'改为价格,同时将'是否促销'改为'T',输出"促销修改成功";当价格大于或者等于'现在价格'时,输出"属于涨价,不属于促销,促销修改不成功"。

sql 复制代码
CREATE PROCEDURE chuxiao(in bianhao int,in jiage decimal(5,2))
BEGIN
declare a decimal(5,2);
declare  str varchar(50);
select price into a from autoparts where apid=bianhao;
if jiage>=a then
	set str="属于涨价,不属于促销,促销修改不成功";
	select str;
else
	update autoparts set old_price=price,price=jiage,is_sale=1 where apid=bianhao;
	set str="促销修改成功";
	select str;
end if;
END

(3)创建一存储过程,可以查询特定日期提交的订单信息,按照收货人姓名和收货人地址排序,使得属于同一收货人的订单汽车配件信息连续排列,方便后台管理人员发货配送,存储过程运行效果如表8-3所示.

sql 复制代码
CREATE PROCEDURE chaxun(in date_time datetime)
BEGIN
select `name`,Address_aid,Apname,`Number` from autoparts,`order`,order_has_autoparts 
where `Order`.oid=order_has_autoparts.Order_oid and 
order_has_autoparts.Autoparts_apid=autoparts.apid and order_date=date_time order by `name`,Address_aid;
END

【实验5-2】调用存储过程

通过CALL语句分别完成【实验5-1】创建的三个存储过程的调用,并查看存储过程调用前后的效果。

1. 调用 5-1-1 的存储过程( login ):

2. 调用 5-1-2 的存储过程( chuxiao ):

3. 调用 5-1-3 的存储过程( chaxun ):

【实验5-3】创建存储函数

(1)创建一个存储函数,输入汽车配件编号Apid,根据该商品生产日期 productive_year,返回该商品的年龄。

sql 复制代码
CREATE  FUNCTION age(a int) 
RETURNS int
NO SQL
DETERMINISTIC
SQL SECURITY INVOKER
BEGIN
RETURN (select year(current_date())-year(productive_year) from autoparts where apid=a);
END

(2)构建一存储函数,可以将一个英文字符串返回一个中文字符串:submit-已提交、cancel-已取消、pay-已确认付款方式、out-已发货、finish-已收货、return-退货中、return_finish-退货完成。

sql 复制代码
CREATE FUNCTION translate(str varchar(50))
 RETURNS varchar(50) 
    NO SQL
    DETERMINISTIC
    SQL SECURITY INVOKER
BEGIN
case
	when str="submit" then return "已提交";
	when str="cancel" then return "已取消";
	when str="pay" then return "已确认付款方式";
	when str="out" then return "已发货";  
    when str="finish" then return "已收货";
	when str="return" then return "退货中";  
	when str="return_finish" then return "退货完成";
end case;

END

【实验5-4】调用存储函数

通过SELECT语句分别完成【实验5-3】创建的三个存储函数的调用。

1、调用5-3-1的存储函数:

2、调用5-3-2的存储函数:



(1)创建一登录的存储过程,输入参数为会员账户和会员密码,如果在Client表中能够找到,则输出"登录成功",否则输出"账户或者密码不对"。

代码如下:

CREATE PROCEDURE login(in client_cid int,in client_password char(10))

BEGIN

declare a char(10);

select `password` into a from client where cid=client_cid and `password`=client_password;

if a then

set a="登录成功";

else

set a="账户或者密码不对";

end if;

select a;

END

(2)创建一修改汽车配件信息的存储过程,用于后台管理人员对已有的某汽车配件进行促销管理,输入参数为汽车配件编号、价格;当价格小于'现在价格'时,将'原始价格'改为'现在价格',将'现在价格'改为价格,同时将'是否促销'改为'T',输出"促销修改成功";当价格大于或者等于'现在价格'时,输出"属于涨价,不属于促销,促销修改不成功"。

代码如下:

CREATE PROCEDURE chuxiao(in bianhao int,in jiage decimal(5,2))

BEGIN

declare a decimal(5,2);

declare str varchar(50);

select price into a from autoparts where apid=bianhao;

if jiage>=a then

set str="属于涨价,不属于促销,促销修改不成功";

select str;

else

update autoparts set old_price=price,price=jiage,is_sale=1 where apid=bianhao;

set str="促销修改成功";

select str;

end if;

END

(3)创建一存储过程,可以查询特定日期提交的订单信息,按照收货人姓名和收货人地址排序,使得属于同一收货人的订单汽车配件信息连续排列,方便后台管理人员发货配送,存储过程运行效果如表8-3所示.

代码如下:

CREATE PROCEDURE chaxun(in date_time datetime)

BEGIN

select `name`,Address_aid,Apname,`Number` from autoparts,`order`,order_has_autoparts

where `Order`.oid=order_has_autoparts.Order_oid and

order_has_autoparts.Autoparts_apid=autoparts.apid and order_date=date_time order by `name`,Address_aid;

END

(1)创建一个存储函数,输入汽车配件编号Apid,根据该商品生产日期 productive_year,返回该商品的年龄。

代码如下:

CREATE FUNCTION age(a int)

RETURNS int

NO SQL

DETERMINISTIC

SQL SECURITY INVOKER

BEGIN

RETURN (select year(current_date())-year(productive_year) from autoparts where apid=a);

END

(2)构建一存储函数,可以将一个英文字符串返回一个中文字符串:submit-已提交、cancel-已取消、pay-已确认付款方式、out-已发货、finish-已收货、return-退货中、return_finish-退货完成。

代码如下:

CREATE FUNCTION translate(str varchar(50))

RETURNS varchar(50)

NO SQL

DETERMINISTIC

SQL SECURITY INVOKER

BEGIN

case

when str="submit" then return "已提交";

when str="cancel" then return "已取消";

when str="pay" then return "已确认付款方式";

when str="out" then return "已发货";

when str="finish" then return "已收货";

when str="return" then return "退货中";

when str="return_finish" then return "退货完成";

end case;

END

sql 复制代码
【实验5-1】创建存储过程
(1)创建一登录的存储过程,输入参数为会员账户和会员密码,如果在Client表中能够找到,则输出"登录成功",否则输出"账户或者密码不对"。

代码如下:
CREATE PROCEDURE login(in client_cid int,in client_password char(10))
BEGIN
declare a char(10);
select `password` into a from client where cid=client_cid and `password`=client_password;
if a then
	set a="登录成功";
else
	set a="账户或者密码不对";
end if;
select a;
END

(2)创建一修改汽车配件信息的存储过程,用于后台管理人员对已有的某汽车配件进行促销管理,输入参数为汽车配件编号、价格;当价格小于'现在价格'时,将'原始价格'改为'现在价格',将'现在价格'改为价格,同时将'是否促销'改为'T',输出"促销修改成功";当价格大于或者等于'现在价格'时,输出"属于涨价,不属于促销,促销修改不成功"。

代码如下:
CREATE PROCEDURE chuxiao(in bianhao int,in jiage decimal(5,2))
BEGIN
declare a decimal(5,2);
declare  str varchar(50);
select price into a from autoparts where apid=bianhao;
if jiage>=a then
	set str="属于涨价,不属于促销,促销修改不成功";
	select str;
else
	update autoparts set old_price=price,price=jiage,is_sale=1 where apid=bianhao;
	set str="促销修改成功";
	select str;
end if;
END

(3)创建一存储过程,可以查询特定日期提交的订单信息,按照收货人姓名和收货人地址排序,使得属于同一收货人的订单汽车配件信息连续排列,方便后台管理人员发货配送,存储过程运行效果如表8-3所示.

代码如下:
CREATE PROCEDURE chaxun(in date_time datetime)
BEGIN
select `name`,Address_aid,Apname,`Number` from autoparts,`order`,order_has_autoparts 
where `Order`.oid=order_has_autoparts.Order_oid and 
order_has_autoparts.Autoparts_apid=autoparts.apid and order_date=date_time order by `name`,Address_aid;
END

【实验5-3】创建存储函数
(1)创建一个存储函数,输入汽车配件编号Apid,根据该商品生产日期 productive_year,返回该商品的年龄。

代码如下:
CREATE  FUNCTION age(a int) 
RETURNS int
NO SQL
DETERMINISTIC
SQL SECURITY INVOKER
BEGIN
RETURN (select year(current_date())-year(productive_year) from autoparts where apid=a);
END

(2)构建一存储函数,可以将一个英文字符串返回一个中文字符串:submit-已提交、cancel-已取消、pay-已确认付款方式、out-已发货、finish-已收货、return-退货中、return_finish-退货完成。

代码如下:
CREATE FUNCTION translate(str varchar(50))
 RETURNS varchar(50) 
    NO SQL
    DETERMINISTIC
    SQL SECURITY INVOKER
BEGIN
case
	when str="submit" then return "已提交";
	when str="cancel" then return "已取消";
	when str="pay" then return "已确认付款方式";
	when str="out" then return "已发货";  
    when str="finish" then return "已收货";
	when str="return" then return "退货中";  
	when str="return_finish" then return "退货完成";
end case;
END

本文为个人学习笔记与经验总结,仅供学习交流参考

相关推荐
sim202015 小时前
systemctl isolate graphical.target命令不能随便敲
linux·mysql
档案宝档案管理15 小时前
档案宝自动化档案管理,从采集、整理到归档、利用,一步到位
大数据·数据库·人工智能·档案·档案管理
C_心欲无痕16 小时前
浏览器缓存: IndexDB
前端·数据库·缓存·oracle
lkbhua莱克瓦2416 小时前
进阶-索引3-性能分析
开发语言·数据库·笔记·mysql·索引·性能分析
剑来.16 小时前
事务没提交,数据库为什么会越来越慢?
数据库·oracle
IT教程资源C17 小时前
(N-089)基于springboot网上订餐系统
mysql·springboot订餐系统
IT教程资源D18 小时前
[N_083]基于springboot毕业设计管理系统
mysql·springboot毕业设计
韦东东18 小时前
DeepSeek:R1本地RAG 问答: 功能新增,附 六大关键技术优化路径参考
数据库·mysql
Leon-Ning Liu18 小时前
19c RAC 环境 Patch 38326922 应用实战
数据库·oracle
虫小宝18 小时前
优惠券省钱app高并发秒杀系统:基于Redis与消息队列的架构设计
数据库·redis·缓存