1、课程实验报告 (实验8) 课程名称 大型数据库 专业班级 软件 姓 名 学 号 指导教师 计算机学院 ﻬ实验教学考核与成绩评定办法 1. 课内实验考核成绩,严格按照该课程教学大纲中明确规定得比重执行。实验成绩不合格者,不能参加课程考试,待补做合格后方能参加考试。 2. 单独设立得实验课考核按百分制评分,考核内容应包括基本理论、实验原理与实验。 3. 实验考核内容包括:1)实验预习;2)实验过程(包括实验操作、
2、实验记录与实验态度、表现);3)实验报告;权重分别为0、2 、0、4 、 0、4;原则上根据上述三个方面进行综合评定。学生未取得1)与2)项成绩时,第3)项成绩无效。 4. 实验指导教师应严格按照考核内容分项给出评定成绩,并及时批改实验报告,给出综合成绩,反馈实验中出现得问题。实验成绩在教师手册中有记载。 实验报告主要内容 一。 实验目得 二。 实验仪器及设备 三. 实验原理 四。 实验步骤 五。 实验记录及原始记录 六。 数据处理及结论 七。 实验体会(可选项) 注:1、 统一采用A4纸,(正文采用宋体五号字)或手写,右侧装订。 2、 实验类别指验证、演
3、示、综合、设计、创新(研究)、操作六种类型实验. 3、 验证性实验:就是指为了使学生巩固课程基本理论知识而开设得强调演示与证明,注重实验结果(事实、概念或理论)得实验。 4、 综合性实验:就是指实验内容涉及本课程得综合知识或本课程相关得课程知识得实验。 5、 设计性实验:就是指给定实验目得、要求与实验条件,由学生自行设计实验方案并加以实现得实验。 实验题目 实验八 存储过程、函数、程序包与触发器 实验室 机房9202 实验时间 2016 年 5月 17日 实验类别 设计 同组人数 1 成 绩 指导教师签字: 【实验目得】 (1)掌握存储过程得
4、编辑及调用方法; (2)掌握函数得编辑及调用方法; (3)掌握程序包得编辑及调用方法; (4)掌握DML触发器得创建及应用。 【实验原理】 1、 存储过程 2、 函数 3、 程序包 4、 触发器 【实验内容】 基本任务 一、存储过程、函数与程序包 [设计编程1] 假若有一个学生成绩管理系统,其中有一个学生成绩表stu_scores_XXX(学号,课程号,成绩,录入时间),其中课程号得第3位代表课程类型(1:必修 2:考查 3:选修).且要求一个学生得某一门课程只能有一个成绩。 (1)现要求设计学生成绩表stu_scores_XXX得表结构及约束,表结构中应至
5、少包含以上列出得字段,设计完成后创建该表. (2)编写程序包pkg_score_XXX,该程序包应至少提供以下功能: Ø 教师可向学生成绩表中录入学生得考试成绩,在录入记录时要求对可能出现得异常进行处理。 Ø 教师可根据学号与课程号,查询出该某个学生某门课程得成绩,并返回对应记录。 Ø 当输入某课程得课程号后,可查询出该课程得课程类型(1:必修 2:考查 3:选修); Ø 当输入一个百分制成绩,可返回其五级分制成绩(优、良、中、及、不及格); Ø 当输入某个学生得学号时,可查询出该生得成绩信息及课程类型,要求必修课输出百分制成绩,选修课或考查课输出五分制成绩。 包规范(包
6、头)代码: create or replace package pkg_score_221 is function course_type_221(cid char) return nvarchar2; function getgreade(sid number,cid char) return number; function getfive_score(grd number) return char; procedure insert_data(sid number,cid char,grd number,prd varchar2); procedure sele_stu
7、score_221(sid number); end pkg_score_221; 包体代码: create or replace package body pkg_score_221 IS function course_type_221(cid char) return nvarchar2 IS v_ctype nvarchar2(10); v_str char(1); begin v_str:=substr(cid, 3, 1); case v_str WHEN ’1’ THEN v_ctype:=’必
8、修课'; WHEN ’2’ THEN v_ctype:='考查课'; WHEN ’3' THEN v_ctype:=’选修课'; else v_ctype:=’课程类型错误’; end case; return v_ctype; end course_type_221; function getgreade(sid number,cid char) return number is cid1 number; begin select grade into cid1
9、 from stu_scores_221 where stuid=sid and courseid=cid; return cid1; end getgreade; function getfive_score(grd number) return char is ss nvarchar2(10); BEGIN CASE WHEN grd>=90 and grd<=100 THEN ss:='优秀’; WHEN grd〉=80 and grd<90 THEN ss:='良好';
10、 WHEN grd>=70 and grd〈80 THEN ss:='中等'; WHEN grd>=60 and grd<70 THEN ss:=’及格’; ELSE ss:='不及格'; end case; return ss; end getfive_score; procedure sele_stuscore_221(sid number) IS BEGIN FOR i IN (select * from stu_scores_221 where stuid=sid) LOOP IF c
11、ourse_type_221(i、courseid) =’必修课’ THEN dbms_output、put_line(’学号:’|| i、stuid || ’ 课程:’||i、courseid||' 课程类型:’||course_type_221(i、courseid)||’ 成绩:’||i、grade); ELSE dbms_output、put_line('学号:’|| i、stuid || ' 课程:'||i、courseid||’ 课程类型:’||course_type_221(i、course
12、id)||’ 成绩:’||getfive_score(i、grade)); END IF; END LOOP; END sele_stuscore_221; procedure insert_data(sid number,cid char,grd number,prd varchar2) IS num_null_221 exception; Pragma exception_init(num_null_221,—1400); BEGIN INSERT INTO stu_scores_221(stuid,courseid,g
13、rade,prodession) VALUES(sid,cid,grd,prd); mit; EXCEPTION WHEN DUP_VAL_ON_INDEX THEN dbms_output、put_line ('该学生信息已存在’); WHEN num_null_221 THEN dbms_output、put_line('违反了非空约束!’); END insert_data; END pkg_score_221; (3)试编写程序块分别调用测试程序包中得公有存储过程。 插入数据: 利用学号查询信息:
14、 二、触发器 [设计编程2] 假若在员工考勤系统中有一个员工考勤表empl_kq_XXX,其表中得列内容要求如表1所示: 表1 员工考勤表empl_kq_xxx 名称 备注 考勤序号 主键 员工编号 考勤类型 可取值 “缺勤”、“迟到”、“早退”、“病假”、“事假” 记录者编号 记录日期 1)设计员工考勤表empl_kq_XXX得表结构及约束,并创建该表. 2)要求考勤序号列得值就是能够自动生成得有序值。 3)要求用户在向员工考勤表empl_kq_XXX中录入考勤记录时,不用输入考勤序号,该列值在新记录录入时可由系统自动生成.






