You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

77 lines
2.5 KiB

5 years ago
drop PROCEDURE if EXISTS details;
CREATE PROCEDURE details(in uNum varchar(8))
READS SQL DATA
BEGIN
select users.userNo , users.name , users.level , book.bookNo ,
book.bookName , year(orders.orderTime) , orderdetails.Onumber , book.price
from users,orders,orderdetails,book
where users.userNo = uNum
and orders.userNo = uNum
and orderdetails.userNo = uNum
and orderdetails.bookNo = book.bookNo;
END;
call details("0000001");
drop PROCEDURE if EXISTS createOrder;
CREATE PROCEDURE createOrder(in uNum varchar(8))
READS SQL DATA
BEGIN
declare bookMoney float(5);
declare sNo varchar(8);
declare oNo varchar(8);
declare oST varchar(20);
declare P_OrderNo varchar(50);
declare dST varchar(10);
declare bn varchar(20);
declare nm int;declare i int;
DECLARE done INT DEFAULT 0;##创建结束标志变量
DECLARE cur cursor
for select bookNo,num,id
FROM shoppingcart WHERE userNo = uNum;##创建游标
DECLARE CONTINUE HANDLER FOR NOT found SET done = 1;##定义游标结束时的返回值
set @oST='未处理';
SET @dST='未配送';
-- 将会员号和时间拼接起来作为订单号
SELECT CONCAT(uNum,NOW()) into P_OrderNo;
-- 统计此次购买金额存到bookMoney
select sum(num * price) into bookMoney from shoppingcart where userNo = uNum;
-- 查询此次的购物车编号存到sNo
select distinct(scartNo) into sNo from shoppingcart where userNo = uNum;
-- Begin Tran
insert into orders (userNo, orderTime, sumMoney, scartNo,orderStatus,orderNo)
value(uNum, now(), bookMoney, sNo,@oST,P_OrderNo);
insert into distributionlist (orderNo, userNo, deliveryStatus)
value(P_OrderNo, uNum, '未完成配送');
select last_insert_id() into oNo;
-- Commit Tran
-- 购书明细信息写入订单明细表中
open cur; ##打开游标
read_loop:loop
fetch cur into bn,nm,i;
if done = 1 then
leave read_loop;##跳出循环
end if;
insert into orderdetails (orderNo, deliveryStatus, bookNo, userNo,Onumber)
value(P_OrderNo, '未配送', bn, uNum,nm);
end loop;
close cur;
DELETE FROM shoppingcart WHERE userNo = uNum;
SELECT * FROM orderdetails;
SELECT * from shoppingcart;
END;
call createOrder("0000001");
drop PROCEDURE if EXISTS pressSales;
CREATE PROCEDURE pressSales()
BEGIN
select press , sum(Onumber) from orderdetails, book
where orderdetails.bookNo = book.bookNo group by orderdetails.bookNo order by sum(Onumber);
END;
call pressSales();