《oracle--简单的选课系统的设计与实现(共6页).doc》由会员分享,可在线阅读,更多相关《oracle--简单的选课系统的设计与实现(共6页).doc(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上实验三(设计性) 简单的选课系统的设计与实现一开发语言及实现平台或实验环境Oracle11i二实验目的(1)进一步熟悉和掌握实验一、二中的各种操作。(2)能够在实际的事例中灵活运用学到的有关知识。(3)能够编写满足某种要求的功能。三.实验要求(1)为自己建立用户帐号(以学号为帐号)。(2)以新建的帐号登录数据库,创建如下三个基表结构并输入相应表内容:S (S#,SNAME,AGE,SEX) 对应的中文为:学生 (学号,姓名,年龄,性别)SC (S#,C#,GRADE) 对应的中文为:选课(学号,课程号,成绩) C(C#,CNAME,TEACHER) 对应的中文为:课程
2、(课程号,课程名,任课教师)(3)用INSERT 命令输入数据 表1 基本表S的数据S1WANG20MS2LIU19MS5LOU21FS8DONG18F表2 基表C的数据C1MATHSMAC2CHEMISTRYZHOUC3DBLIC5OSWEN 表3 基本表SC的数据(空格为未选修) C# S#S1S2S5S8C180857090C270NULL60NULLC385728090C5706565NULL(4)对S、C、SC表进行操作1)把C2课程的非空成绩提高10%。2)在S和SC表中删除学号为S8的所有数据。(5)对基本表S、C、SC操作1) 检索选修课程名为MATHS的学生学号与姓名。2)
3、检索不学C2课的学生姓名与年龄。3) 计算每个学生有成绩的课程门数和平均成绩。(6)用PL/SQL的存储过程删除学号为S8的学生;(7)用带输入输出参数的存储过程查询出任意给定学号和课程后的成绩;(8)用函数作第7题(选作)。四 实验原理(1)SQL*Plus命令。(2)表名命名规则所用的表名必须满足下面的条件:a) 名字必须以A-Z 或a-z的字母开始;b) 名字可以包括字母、数字和特殊字母(_)。字符$和#也是合法的,但是这种用法不提倡;c) 名字大小写是一样的;例如EMP、emp和eMp是表示同一个表;d) 名字最长不超过30个字符;e) 表名不能和其它的对象重名;f) 表名不能是SQL
4、保留字。(3)字段类型VARCHAR2(w)、CHAR(w)、NUMBER、 NUMBER(w)、NUMBER(w,s)、DATE、 LONG RAW 和LONG RAW(4)Create命令1)CREATE TABLE table_name( column_name type(size), column_name type(size), );例如:CREATE TABLE DEPT(DEPTNO NUMBER(2), DNAME VARCHAR2(12), LOC VARCHAR2(12);2) CREATE TABLE table_name (column_name,) AS SELECT
5、 statement;例如:CREATE TABLE DEPTNO10 (NAME,LOCATION)AS SELECT DNAME,LOC FROM DEPT WHERE DEPTNO = 10;(5)完整性约束Oracle允许用户为表和列定义完整性约束来增强一定的规则。可分为:表约束和字段约束(6)约束类型1)NOT NULL约束NOT NULL约束保证字段值不能为NULL。没有NOT NULL约束的字段,值可以为NULL。2)UNIQUE约束指定一个字段或者字段的集合为唯一键。在表中没有两行具有相同的值。如果唯一键是基于单条记录的,NULL是允许的。3)主键约束(Primary Key
6、Constraint)主键约束强制字段和字段集合的唯一性,并且用一个唯一索引来管理它。每个表中只能用一个主键,这样可以通过主键来标识表中的每条记录。NULL值不允许在主键字段出现。4)外键约束外键提供表内或表间的完整性规则。外键必须依赖于一个primary或unique key。5)Check约束CHECK约束定义了每条记录必须满足的条件(7) Alter命令ALTER TABLE命令可用来修改数据表的定义。命令格式:ALTER TABLE tablename(8) Drop 命令用DROP TABLE命令删除Oracle数据表的定义。命令格式:DROP TABLE table_name CA
7、SCADE CONSTRAINT例如:DROP TABLE EMP;(9)记录的输入及修改1) 插入SQLinsert into s values();2) 修改SQLupdate s set 3) 删除SQLselect from s where condition(10) 简单查询select * from s;(11)提交和回滚commit/rollback(12)PL/SQL字符集和所有其他程序设计语言一样,PL/SQL也有一字符集。用PL/SQL编程时可能使用的字符算术运算符关系运算符杂符号(13) 常用数据类型Varchar2NumberDateBoolean(14)PL/SQL的
8、组件块结构编码;变量声明;控制结构。包括程序控制,if逻辑结构以及循环结构;异常处理(exception);五 实验步骤(1)为自己建立用户帐号(以学号为帐号)create user s identified by s;grant all privilege to s;(2)以新建的帐号登录数据库,创建如下三个基表结构并输入相应表内容:S (S#,SNAME,AGE,SEX) 对应的中文为:学生 (学号,姓名,年龄,性别)SC (S#,C#,GRADE) 对应的中文为:选课(学号,课程号,成绩) C(C#,CNAME,TEACHER) 对应的中文为:课程(课程号,课程名,任课教师)sqlplu
9、s s/smyoraclecreate table s(s# varchar2(20) primary key,sname varchar2(20),age number,sex varchar2(20);create table c(c# varchar2(20) primary key,cname varchar2(20),teacher varchar2(20);create table sc(s# varchar2(20),c# varchar2(20),grade varchar2(20),primary key(s#,c#),foreign key (s#) references
10、s(s#) on delete cascade,foreign key (c#) references c(c#) on delete cascade);(3)用INSERT 命令输入数据 表1 基本表S的数据S1WANG20MS2LIU19MS5LOU21FS8DONG18F表2 基表C的数据C1MATHSMAC2CHEMISTRYZHOUC3DBLIC5OSWEN 表3 基本表SC的数据(空格为未选修) C# S#S1S2S5S8C180857090C270NULL60NULLC385728090C5706565NULLinsert into s values(S1, WANG, 20,
11、M);insert into s values(S2, LIU, 19, M);insert into s values(S5, LOU, 21, F);insert into s values(S8, DONG, 18, F);commit;insert into c values(C1, MATHS, MA);insert into c values(C2, CHEMISTRY, ZHOU);insert into c values(C3, DB, LI);insert into c values(C5, OS, WEN);commit;insert into sc values(S1,
12、C1, 80);insert into sc values(S1, C2, 70);insert into sc values(S1, C3, 85);insert into sc values(S1, C5, 70);insert into sc values(S2, C1, 85);insert into sc values(S2, C2, NULL);insert into sc values(S2, C3, 72);insert into sc values(S2, C5, 65);insert into sc values(S5, C1, 70);insert into sc val
13、ues(S5, C2, 60);insert into sc values(S5, C3, 80);insert into sc values(S5, C5, 65);insert into sc values(S8, C1, 90);insert into sc values(S8, C2, NULL);insert into sc values(S8, C3, 90);insert into sc values(S8, C5, NULL);commit;(4)对S、C、SC表进行操作1)把C2课程的非空成绩提高10%。update sc set grade = grade * 1.1 wh
14、ere c# = C2 and grade is not null;2)在S和SC表中删除学号为S8的所有数据。delete from s where s# = S8;(5) 对基本表S、C、SC操作1)检索选修课程名为MATHS的学生学号与姓名。select s.s#, s.sname from s,c,sc where s.s# = sc.s# and c.c# = sc.c# and ame = MATHS;2) 检索不学C2课的学生姓名与年龄。select s.sname, s.age from s where s# in (select s# from sc where c# = C
15、2 and grade is null);3) 计算每个学生有成绩的课程门数和平均成绩。select s#, count(c#), avg(grade) from sc where grade is not null group by s#;(6)用PL/SQL的存储过程删除学号为S8的学生;create or replace procedure pro_stu isbegin delete from s where s# = S8;end pro_stu;(7)用带输入输出参数的存储过程查询出任意给定学号和课程后的成绩;create or replace procedure pro_grad
16、e_query(stu_no in s.s#%type, stu_cname in ame%type, stu_grade out sc.grade%type) isbeginselect grade into stu_grade from sc,s,c where s.s# = sc.s# and c.c# = sc.c# and s.s# = stu_no and ame = stu_cname; end pro_grade_query;(8)用函数作第7题(选作)。create or replace function fun_grade_query(stu_no s.s#%type, stu_cname ame%type) return sc.grade%type isstu_grade sc.grade%type;beginselect grade into stu_grade from sc,s,c where s.s# = sc.s# and c.c# = sc.c# and s.s# = stu_no and ame = stu_cname; return stu_grade;end fun_grade_query;专心-专注-专业