oracle购物篮分析,购物车的存储过程学习-数据库专栏,SQL Server

从来没有接触过存储过程,为了这个项目写了几个存储过程。就当是学习了,呵呵,这个购物车的存储过程中使用了table(表),cursor(游标)变量。

要求如下:

一个商品表[ware],里面包含有的字段有id,marketprice,memberprice,vipprice等等,还一个会员购物车[membercar]数据表。包括的有id,memberid,wareid,warenum等等。现要求是能取得购物车表里的所有数据和marketprice*warenum(所有商品和)的总价钱,即有n件商品就获取这n件商品的总价钱而不是单一的价钱。本来在客户端里直接根据购物车[membercar]表的数据读取商品表[ware]里的数据,再用变量累加即可的。但问题却是,购物车里的所有商品显示使用了分页显示。所以累加时就出问题,如果为了累加这些价钱而在分页循环显示后再加一个循环所有记录来累加价钱数据,这样不是不行,但效率就可想而知了!!!

现一个解决方法就是,重新构造一个购物车表的镜像,但却多了商品的几个价钱总数字段。即marketprice*warenum(单一商品)。从而读取购物车时不是读取原来购物车数据表,而是读取这个镜像数据表,并在读取时累加这些总价钱。

存储过程代码如下:

—-#####################################################################################

—-# 过程作用:返回用户购物车里的所有数据,并包含统计了商品的价钱 (价钱=商品表的价格*购物车表里的数量)

—-# 作者:死在水中的鱼

—-# 日期:2004年10月15日

—-#####################################################################################

create procedure membercar_info @memberid int  as

–使用此句才能保持客户端的数据

set nocount on

declare @car_id int,@car_wareid int,@car_warenum smallint

declare @car_totalmemberprice numeric(8,2),@car_totalmarketprice numeric(8,2),@car_totalvipprice numeric(8,2)

–定义一个查询membercar表的游标变量。获取数据

declare car_cursor  cursor for

select id,wareid,warenum from [membercar] where memberid=@memberid and ispay=0

–建立一个临时表变量

declare @car_table table  (id int,

wareid int,warenum smallint,marketprice numeric(8,2),memberprice numeric(8,2),vipprice numeric(8,2))

–打开membercar表提取数据到临时变量

open car_cursor

fetch next from car_cursor into @car_id,@car_wareid,@car_warenum

while @@fetch_status = 0

begin

–取得商品的总市场价、总会员价和总vip价

select @car_totalmarketprice=marketprice*@car_warenum,@car_totalmemberprice=memberprice*@car_warenum,@car_totalvipprice=vipprice*@car_warenum from [ware] where id=@car_wareid

–添加进临时变量表

insert into @car_table (id,wareid,warenum,marketprice,memberprice,vipprice) values (@car_id,@car_wareid,@car_warenum,@car_totalmarketprice,@car_totalmemberprice,@car_totalvipprice)

— 没有到表尾,继续提取数据到临时变量

fetch next from car_cursor into @car_id,@car_wareid,@car_warenum

end

–关闭membercar数据库的游标

close car_cursor

deallocate car_cursor

–返回最终数据表

select * from @car_table

go

要求表达不是很清楚,各位原谅…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值