《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

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

相关推荐
小二·5 小时前
MyBatis基础入门《十六》企业级插件实战:基于 MyBatis Interceptor 实现 SQL 审计、慢查询监控与数据脱敏
数据库·sql·mybatis
bing.shao5 小时前
Golang WaitGroup 踩坑
开发语言·数据库·golang
专注VB编程开发20年5 小时前
C#内存加载dll和EXE是不是差不多,主要是EXE有入口点
数据库·windows·microsoft·c#
小二·5 小时前
MyBatis基础入门《十二》批量操作优化:高效插入/更新万级数据,告别慢 SQL!
数据库·sql·mybatis
何中应5 小时前
【面试题-6】MySQL
数据库·后端·mysql·面试题
路遥_135 小时前
银河麒麟 V10 安装部署瀚高数据库 HighGoDB 4.5 全流程(统信UOS Server 20同理)
数据库
TDengine (老段)5 小时前
从关系型数据库到时序数据库的思维转变
大数据·数据库·mysql·时序数据库·tdengine·涛思数据·非关系型数据库
老兵发新帖5 小时前
ubuntu网络管理功能分析
数据库·ubuntu·php
2301_768350235 小时前
MySQL服务配置与管理
数据库·mysql