Oracle-实验4

上传人:go****e 文档编号:134410104 上传时间:2020-06-05 格式:DOC 页数:13 大小:202.18KB
返回 下载 相关 举报
Oracle-实验4_第1页
第1页 / 共13页
Oracle-实验4_第2页
第2页 / 共13页
Oracle-实验4_第3页
第3页 / 共13页
Oracle-实验4_第4页
第4页 / 共13页
Oracle-实验4_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《Oracle-实验4》由会员分享,可在线阅读,更多相关《Oracle-实验4(13页珍藏版)》请在金锄头文库上搜索。

1、2015-2016-2学期Oracle数据库应用技术实验报告班 级: 13级软件工程2班 学 号: 2220131011 姓 名: 蒋生栋 指导教师: 史金余 成 绩: 2016年 5 月 24 日选课序号: 姓名: 学号: 班级:目 录1.实验目的12.实验内容12.1 触发器设计22.2 存储过程、自定义函数设计22.3 程序包设计33.实验步骤33.1 创建表空间RESTAURANT,创建用户DINER33.2 创建餐饮系统数据库的所有表,并向各表插入演示数据33.3 完成【实验内容】中的触发器、存储过程、函数和程序包等功能设计,将程序脚本保存到文本文件Source.sql中44.实验总

2、结4PL/SQL程序设计1. 实验目的u 掌握PL/SQL程序设计基本技巧,包括基本数据类型、表类型、数组类型、匿名程序块、控制语句、PL/SQL中使用SQL语句、游标、错误处理等。u 熟悉和掌握PL/SQL中关于存储过程、函数、包和触发器程序设计技术。2. 实验内容实验平台:PL/SQL Developer或Oracle的其它客户端管理工具。某餐饮系统数据库(加粗字段为主键,斜体字段为外键),请创建如下各数据表,并实现如下存储过程、函数、包和触发器等功能设计,将程序脚本保存到文本文件Source.sql中:(1) 菜肴类别表MK(菜肴类别编号MKid,菜肴类别名称MkName),菜肴类别名称

3、:鱼类、蔬菜类、凉菜类、肉类、主食类和酒水类等。(2) 菜单信息表MList(菜肴编号Mid,菜肴名称Mname,菜肴类别MKid,菜肴单价Mprice,菜肴成本单价Mcost,更新日期Mdate)。(3) 餐台类别表DK(餐台类别编号DKid,餐台类别名称DkName),餐台类别:包间和散台等。(4) 餐台信息表Dinfo (餐台编号Did,餐台名称Dname,餐台类别DKid,座位数Dseats,更新日期Ddate)。(5) 消费单主表C (消费单号Cid,餐台编号Did,消费开始时间StartTime,结账时间EndTime,消费金额合计Smoney,盈利金额合计SPsum),其中,消费

4、金额合计=消费单明细表CList中该消费单号的所有消费记录的消费金额的合计,即SUM(消费金额)或SUM(菜肴单价 消费数量),盈利金额合计=消费单明细表CList中该消费单号的所有消费记录的盈利合计,即SUM((菜肴单价 - 菜肴成本单价) 消费数量)。(6) 消费单明细表CList (消费单号Cid,序号Sid,菜肴编号Mid,菜肴名称Mname,消费数量Cqty,菜肴单价Mprice,菜肴成本单价Mcost,消费金额Cmoney) ,消费金额=消费数量菜肴单价;消费数量为正数是正常点菜,消费数量为负数是退菜,消费数量为0是赠菜。2.1 触发器设计2.1.1 为消费单明细表CList定义一

5、个触发器,每插入(INSERT)一条消费单明细记录(消费单号,序号,菜肴编号,消费数量),自动根据菜肴编号从菜单信息表MList中读取菜肴名称Mname、菜肴单价Mprice、菜肴成本单价Mcost,然后计算其消费金额(=消费数量菜肴单价)、以及消费单主表C的消费金额合计、盈利金额合计。编写相应的插入语句(INSERT)和查询语句(SELECT)测试该触发器效果。2.1.2 为消费单明细表CList定义一个触发器,每更新UPDATE一条消费单明细表记录,自动修改其消费金额、以及消费单主表C的消费金额合计、盈利金额合计。编写相应的更新语句(UPDATE)和查询语句(SELECT)测试该触发器效果

6、。2.1.3 为消费单明细表CList定义一个触发器,每删除DELETE一条消费单明细表记录自动修改其消费单主表C的消费金额合计、盈利金额合计。编写相应的删除语句(DELETE)和查询语句(SELECT)测试该触发器效果。2.1.4 将【2.1.1】、【2.1.2】、【2.1.3】三个触发器禁用disable,重新编写一个触发器实现这三个触发器的全部功能。编写相应的插入语句(INSERT)、更新语句(UPDATE)、删除语句(DELETE)和查询语句(SELECT)测试该触发器效果。2.2 存储过程、自定义函数设计2.2.1 设计一个自定义函数fGetDTSum,实现统计某年份给定餐台类别的成

7、本金额合计的功能,输入参数是统计年份和餐台类别,返回数据是成本金额合计。成本金额=消费数量菜肴成本单价。求年份的函数为EXTRACT(YEAR FROM 日期字段),本题:统计年份= EXTRACT(YEAR FROM EndTime),EndTime为结账时间字段。2.2.2 设计一个存储过程pGetKindSum,实现统计某年份给定菜肴类别的盈利金额合计的功能,输入参数是统计年份和菜肴类别,输出参数是盈利金额合计。盈利金额=消费数量 (菜肴单价 - 菜肴成本单价)。2.2.3 编写一段匿名PL/SQL程序块,调用函数fGetDTSum,输出2013年餐台类别名为“包间”的成本金额合计;调用

8、存储过程pGetKindSum,输出2013年菜肴类别名为“鱼类”的盈利金额合计。2.3 程序包设计2.3.1 设计一个程序包,包名为pkSUM,包括并实现【2.2.1】和【2.2.2】的函数及存储过程功能,注意:先创建包头package,包头创建成功后,再创建包体package body。2.3.2 设计一个匿名PL/SQL程序块,参照【2.2.3】调用【2.3.1】中程序包的函数和存储过程,输出2013年餐台类别名为“散台”的成本金额合计,输出2013年菜肴类别名为“蔬菜类”的盈利金额合计。3. 实验步骤(备注:如果用实验室微机,请从【3.2】开始做,登录用户DINER改为stuXX)3.

9、1 创建表空间RESTAURANT,创建用户DINER3.1.2 用户SYSTEM登录Oracle3.1.3 创建表空间RESTAURANT,大小10M。-Oracle 的 FOR EACH ROW 触发器, 不允许在 触发器里面, SELECT / UPDATE / DELETE 自己这个表。-创建表空间RESTAURANT,大小10M。(用户SYSTEM登录Oracle)CREATE TABLESPACE RESTAURANT DATAFILE H:RESTAURANT.ora SIZE 10M -不能使用相对路径 DEFAULT STORAGE ( INITIAL 10K NEXT 50

10、K MINEXTENTS 1 MAXEXTENTS 99 PCTINCREASE 10 ) ONLINE ;3.1.4 创建用户DINER,口令XXX,默认表空间RESTAURANT,给该用户授予角色权限CONNECT、RESOURCE。CREATE USER DINER IDENTIFIED BY m123 DEFAULT TABLESPACE RESTAURANT;GRANT CONNECT TO DINER GRANT RESOURCE TO DINER3.2 创建餐饮系统数据库的所有表,并向各表插入演示数据3.2.1启动PL/SQL Developer(或者启动SQL*PLUS、Ent

11、erprise Manager Console、浏览器模式的EM(企业管理器)等工具均可以),用户DINER登录Oracle。3.2.2 创建实验内容中的餐饮系统数据库的所有表(菜肴类别表MK、菜单信息表MList、餐台类别表DK、餐台信息表Dinfo、消费单主表C、消费单明细表CList)。3.2.3依次向菜肴类别表MK、菜单信息表MList、餐台类别表DK、餐台信息表Dinfo插入足够多的演示数据。-(1)菜肴类别表MK(菜肴类别编号MKid,菜肴类别名称MkName),菜肴类别名称:鱼类、蔬菜类、凉-菜类、肉类、主食类和酒水类等。create sequence seq_MK start

12、with 0increment by 1minvalue 0maxvalue 30000 nocyclenocache ;create table MK(MKid number,MkName varchar2(64),constraint pk_MKid primary key (MKid);insert into MK values(seq_MK.nextval,鱼类)insert into MK values(seq_MK.nextval,蔬菜类)insert into MK values(seq_MK.nextval,凉菜类)insert into MK values(seq_MK.ne

13、xtval,肉类)insert into MK values(seq_MK.nextval,主食类)insert into MK values(seq_MK.nextval,酒水)-(2)菜单信息表MList(菜肴编号Mid,菜肴名称Mname,菜肴类别MKid,菜肴单价Mprice,-菜肴成本单价Mcost,更新日期Mdate)。create sequence seq_MListstart with 0increment by 1minvalue 0maxvalue 30000 nocyclenocache ;create table MList(Mid number,Mname varch

14、ar2(64),MKid number references MK(MKid),Mprice number(8,2),Mcost number(8,2),Mdate date,constraint pk_Mid primary key (Mid);insert into MList values(seq_MList.nextval,比目鱼,1,40.00,20.00,sysdate)insert into MList values(seq_MList.nextval,鲶鱼,1,30.00,15.00,sysdate)insert into MList values(seq_MList.nextval,鲤鱼,1,20.00,10.00,sysdate)insert into MList values(seq_MList.nextval,番茄,2,5.50,4.00,sysdate)insert into MList values(seq_MList.nextval,生菜,2,6.00,5.00,s

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 幼儿/小学教育 > 其它小学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号