《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

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

相关推荐
小吴编程之路1 天前
MySQL 索引核心特性深度解析:从底层原理到实操应用
数据库·mysql
~莫子1 天前
MySQL集群技术
数据库·mysql
凤山老林1 天前
SpringBoot 使用 H2 文本数据库构建轻量级应用
java·数据库·spring boot·后端
就不掉头发1 天前
Linux与数据库进阶
数据库
与衫1 天前
Gudu SQL Omni 技术深度解析
数据库·sql
咖啡の猫1 天前
Redis桌面客户端
数据库·redis·缓存
oradh1 天前
Oracle 11g数据库软件和数据库静默安装
数据库·oracle
what丶k1 天前
如何保证 Redis 与 MySQL 数据一致性?后端必备实践指南
数据库·redis·mysql
_半夏曲1 天前
PostgreSQL 13、14、15 区别
数据库·postgresql
把你毕设抢过来1 天前
基于Spring Boot的社区智慧养老监护管理平台(源码+文档)
数据库·spring boot·后端