数据库实验三

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验任务书(实验三)

课程名称:数据库原理与技术

实验报告要求:

1.列出所有的SQL语句和源代码;

2.程序要求有适当的注释;

3.对数据完整性约束实施要求给出相应的测试用例。

4.实验报告提交电子档。

实验内容:视图、事务与游标

1.定义一个视图,包括购买者的姓名、所在州和他们所订购玩具的名称、价格和数量。购买者的姓名、所在州在表Shopper中

所订购玩具的名称、价格在表Toys中

所定玩具的数量在表OrderDetail中

OrderDetail表与Shopper表通过Order表连接

Toys表和Shopper表也通过Order表连接

2.基于(1)中定义的视图,查询显示所有California州的购买者的姓名和他们所订购玩

具的名称及数量。

3.视图定义如下:

CREATE VIEW vwOrderWrapper

AS

SELECT cOrderNo, cToyId, siQty, vDescription, mWrapperRate

FROM OrderDetail JOIN Wrapper

ON OrderDetail.cWrapperId = Wrapper.cWrapperId

执行以下更新命令并分析该命令的执行结果。

UPDATE vwOrderWrapper

SET siQty = 2, mWrapperRate = mWrapperRate + 1

WHERE cOrderNo = ‘000001’

4.名为prcGenOrder的存储过程产生存在于数据库中的定单号:

CREATE PROCEDURE prcGenOrder

@OrderNo char(6) OUTPUT

as

SELECT @OrderNo=Max(cOrderNo) FROM Orders

SELECT @OrderNo=

CASE

WHEN @OrderNo>=0 and @OrderNo<9 Then

‘00000’+Convert(char,@OrderNo+1)

WHEN @OrderNo>=9 and @OrderNo<99 Then

‘0000’+Convert(char,@OrderNo+1)

WHEN @OrderNo>=99 and @OrderNo<999 Then

‘000’+Convert(char,@OrderNo+1)

WHEN @OrderNo>=999 and @OrderNo<9999 Then

‘00’+Convert(char,@OrderNo+1)

WHEN @OrderNo>=9999 and @OrderNo<99999 Then

‘0’+Convert(char,@OrderNo+1)

WHEN @OrderNo>=99999 Then Convert(char,@OrderNo+1)

END

RETURN

当购物者确认定单时,应该出现下面的步骤:

(1)用上面的过程产生定单号。

(2)定单号,当前日期,购物车ID,和购物者ID应该加到Orders表中。

(3)定单号,玩具ID和数量应加到OrderDetail表中。

(4)在OrderDetail表中更新玩具成本。(提示:Toy cost = Quantity * Toy Rate).

将上述步骤定义为一个事务。编写一个过程以购物车ID和购物者ID为参数,实现这个事务。

Order表

符合第二个条件:

WHEN @OrderNo>=9 and @OrderNo<99 Then

‘0000’+Convert(char,@OrderNo+1)

Max(cOrderNo)=10

所以@OrderNo=000011

OrderDetail表新增数据

2*10=20正确

Orders表

CREATE PROCEDURE prcOrder(@CartId char(6),@ShopperId char(6)) As

Begin transaction

DECLARE @Order char(6)

exec prcGenOrder @Order OUTPUT

SELECT @Order

INSERT into Orders

VALUES(@Order,getdate(),@CartId,@ShopperId,null,null,null,null,null,null)

INSERT INTO OrderDetail(cOrderNo,cToyId,siQty)

SELECT @Order,cToyId,siQty FROM ShoppingCart WHERE cCartId = @CartId

Update OrderDetail

SET mToyCost=mToyRate*siQty

FROM OrderDetail JOIN Toys

ON OrderDetail.cToyId=Toys.cToyId

WHERE cOrderNo=@Order

Commit transaction

Return

--Verify

exec prcOrder '000001','000001'

5.编写一个程序显示每天的定单状态。如果当天的定单值总合大于170,则显示“High

sales”,否则显示”Low sales”。报告中要求列出日期、定单状态和定单总价值。(要求用游标实现)

备份数据到临时表OrderTemp

相关文档
最新文档