《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

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

相关推荐
小徐不徐说2 小时前
C++ 接口与插件设计:从工厂注册到 Qt 动态插件
数据库·c++·qt·系统架构·程序设计
论文复现现场3 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
Decay__4 小时前
04_MySQL DBA 日常运维手册 —— 会话管理、锁与阻塞、事务监控、慢查询与日志巡检
运维·数据库·sql·mysql·架构
心梦缘-雪雁5 小时前
SQL Server 查询数据存在哪个表里
数据库
lusklusklusk6 小时前
Python 巡检脚本:进程运行状态、数据库写入时效检查及邮件通知与告警
数据库·python·oracle
GeW6 小时前
产业新优势基础软件的人才底盘,从Linux与数据库开始
linux·数据库
SelectDB7 小时前
Doris Arrow Flight SQL 高速读取协议实战:与 Snowflake 客户端取数链路对照
大数据·数据库·数据分析
曼岛_7 小时前
[图解密码学]第4章 古典密码
java·数据库·密码学
瀚高PG实验室8 小时前
HGDB V9.0.5 .pgpass 免密登录提示 IsEncryptNon-base64 encoding 警告处理
数据库·postgresql·瀚高数据库
龙腾AI白云8 小时前
大模型检索增强生成(RAG)的技术原理与架构设计
数据库·python·机器学习·知识图谱