达梦数据库原理及应用-课外拓展答案_第1页
达梦数据库原理及应用-课外拓展答案_第2页
达梦数据库原理及应用-课外拓展答案_第3页
达梦数据库原理及应用-课外拓展答案_第4页
达梦数据库原理及应用-课外拓展答案_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课外拓展:针对网络玩具销售系统创建存储过程和触发器操作内容及要求如下。1.存储过程和触发器(1)需要频繁使用一份包含所有玩具的名称、说明、价格的报表。在数据库中创建一个对象,消除获得报表时因网络阻塞造成的延时。CREATEVIEWTOY_REPORTASSELECTCTOYNAME,vTOYDESCRIPTION,MTOYRATEFROMTOYS;(2)对数据库的查询如下。SELECTvFirstName,vLastName,vEmailIdFROMshopper;为上述查询创建存储过程。CREATEPROCEDUREPro_QueryShopperISBEGINSELECTvFirstName,vLastName,vEmailIdFROMshopper;END;调用存储过程CALLPro_QueryShopper();(3)创建存储过程,接收一个玩具编号,显示该玩具的名称和价格。CREATEPROCEDUREPro_GetToyInfo(p_cToyIdINVARCHAR(6))ISBEGINSELECTcToyName,mToyRateFROMToysWHEREcToyId=p_cToyId;END;调用存储过程方法CALLPro_GetToyInfo('000001');(4)创建一个存储过程,将表7.8所示的数据添加到表ToyBrand中。表7.8ToyBrandcBrandId(品牌编号)cBrandName(品牌名称)009FunWorld创建存储过程:CREATEPROCEDUREPro_InsertToyBrandISBEGININSERTINTOToyBrand(cBrandId,cBrandName)VALUES('009','FunWorld');COMMIT;END;调用存储过程:CALLPro_InsertToyBrand();(5)创建一个名为prcAddCategory的存储过程,将表7.9中的数据添加到表Category中。表7.9CategorycCategoryId(类别代码)cCategory(类别名称)vDescription(类别描述)018ElectronicGames这些游戏中包含一个和孩子们交互的屏幕创建存储过程CREATEPROCEDUREprcAddCategoryISBEGININSERTINTOCategory(cCategoryId,cCategory,vDescription)VALUES('018','ElectronicGames','这些游戏中包含一个和孩子们交互的屏幕');COMMIT;END;调用存储过程CALLprcAddCategory();(6)删除存储过程prcAddCategory。DROPPROCEDUREprcAddCategory;(7)创建一个名为prcCharges的存储过程,按照给定的订单编号返回运货费用和包装费用。CREATEORREPLACEPROCEDUREprcCharges(p_cOrderNoINVARCHAR(32),p_ShippingOUTNUMBER,--运货费用p_WrapOUTNUMBER--包装费用)ISBEGINSELECTNVL(mShippingCharges,0),NVL(mGiftWrapCharges,0)INTOp_Shipping,p_WrapFROMOrdersWHEREcOrderNo=p_cOrderNo;END;(8)创建一个名为prcHandlingChanges的存储过程,接收一个订单编号并显示处理费。存储过程prcHandlingCharges中应该用到存储过程prcCharges,以获得运货费用和包装费用。提示处理费=运货费用+包装费用。CREATEORREPLACEPROCEDUREprcHandlingChanges(p_cOrderNoINVARCHAR)ISv_ShippingNUMBER;v_WrapNUMBER;v_HandlingFeeNUMBER;--处理费BEGIN--调用prcCharges获取运费、包装费prcCharges(p_cOrderNo,v_Shipping,v_Wrap);--处理费=运货费+包装费v_HandlingFee:=v_Shipping+v_Wrap;--显示处理费selectv_HandlingFee;END;调用存储过程CALLprcHandlingChanges('000001');2.事务(1)完成订购之后,订购信息被存放在表OrderDetail中,系统应当从玩具的现有数量中减去购物者订购的数量。(2)存储过程prcGenOrder生成数据库中现有的订单编号。CREATEPROCEDUREprcGenOrder(INOrderNoCHAR(6))BEGINDECLAREOrderNoCHAR(6);SELECTMAX(cOrderNo)INTOOrderNoFROMorders;CASEWHENOrderNo>=0ANDOrderNo<9THENSELECTCONCAT('00000',OrderNO);WHENOrderNo>=9ANDOrderNo<99THENSELECTCONCAT('0000',OrderNO);WHENOrderNo>=99ANDOrderNo<999THENSELECTCONCAT('000',OrderNO);WHENOrderNo>=999ANDOrderNo<9999THENSELECTCONCAT('00',OrderNO);WHENOrderNo>=9999ANDOrderNo<99999THENSELECTCONCAT('0',OrderNO);WHENOrderNo>=99999THENSELECTOrderNO;ENDCASE;END;当购物者完成一次订购时,依次执行下列步骤。①调用存储过程preGenOrder生成订单编号。②将订单编号、当前日期、购物者编号添加到Orders表中。③将订单编号、玩具编号、玩具数量添加到OrderDetail表中。④更新OrderDetail表中的玩具总价。提示玩具总价=数量×玩具单价。将上述事务转换成存储过程,该过程接收购物车编号和购物者编号作为参数。创建存储过程CREATEORREPLACEPROCEDUREprcGenOrder(p_cartIdINVARCHAR(10),--购物车编号p_shopperIdINVARCHAR(10)--购物者编号)ISv_maxNoINT;v_newOrderNoCHAR(6);BEGIN--1.取最大订单号,为空则从0开始,+1生成新编号SELECTNVL(MAX(TO_NUMBER(cOrderNo)),0)+1INTOv_maxNoFROMOrders;--2.完全保留你原来的CASE补0逻辑CASEWHENv_maxNo>=0ANDv_maxNo<9THENv_newOrderNo:=CONCAT('00000',v_maxNo);WHENv_maxNo>=9ANDv_maxNo<99THENv_newOrderNo:=CONCAT('0000',v_maxNo);WHENv_maxNo>=99ANDv_maxNo<999THENv_newOrderNo:=CONCAT('000',v_maxNo);WHENv_maxNo>=999ANDv_maxNo<9999THENv_newOrderNo:=CONCAT('00',v_maxNo);WHENv_maxNo>=9999ANDv_maxNo<99999THENv_newOrderNo:=CONCAT('0',v_maxNo);WHENv_maxNo>=99999THENv_newOrderNo:=TO_CHAR(v_maxNo);ENDCASE;--3.插入订单主表INSERTINTOOrders(cOrderNo,dOrderDate,cShopperId,cCartId)VALUES(v_newOrderNo,SYSDATE,p_shopperId,p_cartId);--4.插入订单明细(从购物车读取)INSERTINTOOrderDetail(cOrderNo,cToyId,siQty,cGiftWrap,MToyCost)SELECTv_newOrderNo,cToyId,siQty,'Y',0FROMShoppingCartWHEREcCartId=p_cartId;--5.更新总价=数量×单价UPDATEOrderDetailodSETmToyCost=od.siQty*(SELECTmToyRateFROMToystWHEREt.cToyId=od.cToyId)WHEREod.cOrderNo=v_newOrderNo;COMMIT;EXCEPTIONWHENOTHERSTHENROLLBACK;RAISE;END;调用存储过程CALLprcGenOrder('7','001');(3)当购物者为某个特定的玩具选择礼品包装时,依次执行下列步骤。①属性cGiftWrap中应当存放“Y”,属性cWrapperId应根据选择的包装代码进行更新。②礼品包装费用应当更新。将上述事务转换成存储过程,该存储过程接收订单编号、玩具编号和包装编号作为参数。创建存储过程CREATEORREPLACEPROCEDUREprcUpdateGiftWrap(p_OrderNoINVARCHAR(32),--订单编号p_ToyIdINVARCHAR(32),--玩具编号p_WrapperIdINVARCHAR(32)--包装编号)ISBEGIN--1更新礼品包装标志+包装编号UPDATEOrderDetailSETcWrapperId=p_WrapperId--更新选择的包装代码WHEREcOrderNo=p_OrderNoANDcToyId=p_ToyIdANDcGiftWrap='Y';--2更新礼品包装费用UPDATEOrdersoSETmGiftWrapCharges=(SELECTmWrapperRateFROMWrapperWHEREcWrapperId=p_WrapperId)WHEREcOrderNo=p_OrderNo;--3更新总费用UPDATEOrdersSETmTotalCost=mTotalCost+mGiftWrapChargesWHEREcOrderNo=p_OrderNo;--事务提交COMMIT;EXCEPTIONWHENOTHERSTHENROLLBACK;--出错全部回滚RAISE;END;调用存储过程CALLprcUpdateGiftWrap('000007','000004','W07')(4)如果购物者改变了订货数量,则玩具总价应自动修改。创建存储过程CRE

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论