【实验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
本文为个人学习笔记与经验总结,仅供学习交流参考