《数据库技术及应用》实验报告(共6页).doc
精选优质文档-倾情为你奉上实 验 报 告课程名称数据库技术及应用实验项目名称实验4 PL/SQL及游标操作实验时间(日期及节次)周一10-12节专业软件工程学生所在学院软件学院年级学号姓名指导教师实验室名称4号楼138实验成绩预习情况操作技术实验报告附加:综合创新能力实验综合成绩教师签字 黑龙江大学教务处黑龙江大学计算机科学与技术专业、软件工程专业数据库技术及应用课程实验报告学号姓名班级实验时间周一10-12节实验名称实验4 PL/SQL及游标操作一、 实验目的PL/SQL及游标操作二、 实验环境Windows XP,Oracle数据库三、 主要内容一、PL/SQL1.实现1!+2!+。+N!2.输出100到200中的素数!二、游标已知一个已经建好的数据库factory,现在该数据库上存在三个表1.职工表worker,其结构为 (职工号 numnber ,姓名 char(8), 性别 char(2) , 出生日期 date, 党员否 char, 参加工作时间 date , 部门号 number ),其中职工号为主键2.部门表 department 结构为 ( 部门号 number , 部门名称 varchar(20) ) ,其中 部门号为主键. 通常的部门信息有人事部,市场部,财务处等等3.职工工资表 salary 其结构为 ( 职工号 number ,姓名 char(10) , 日期 date , 工资 number(10,2) ) . 其中职工号和日期为关键字使用游标在以上的数据库上完成如下操作:1.给定一个职工号,查询职工信息及部门名称2.给定部门号(键盘输入),输出该部门每个员工的基本信息以及5月工资信息3.显示最高工资的职工所在的部门名称和工资,并输出该部门中职工的信息四、 实验总结1.DECLARE i BINARY_INTEGER :=1; k BINARY_INTEGER :=1; sum BINARY_INTEGER :=0;BEGIN WHILE i<= N LOOP k: = i * k; sum:= k + sum; i:= i+1; END LOOP;DBMS_OUTPUT.PUT_LINE('1!+2!+。+N!' | sum);END;2. DECLARE i BINARY_INTEGER :=100; j BINARY_INTEGER :=2; sum BINARY_INTEGER :=1;BEGIN WHILE i<= 200 LOOP WHILE j <= i LOOP FLAG:=0; sum:=i%j; IF sum=0 THEN FLAG = 0 ; EXIT; ELSE j:= j+1; END IF; END LOOP; IF(FLAG=1) dbms_output.put_line(i); FLAG=0; END IF; i:=i+1; END LOOP;END;1)create table worker (职工号 number(4),姓名 char(8),性别 char(2),出生日期 date, 党员否 number, 参加工作时间 date , 部门号 number(4)2)create table department(部门号 number(4),部门名称 varchar(20)3)create table salary (职工号 number(4),姓名 char(8),性别 char(2), 出生日期 date, 党员否 number, 参加工作时间 date , 部门号 number(4)1.CREATE VIEW1 emp_info_view(deptno,avgsal,empcount)ASSELECT deptno,avg(sal),count(*) FROM emp GROUP BY deptno; 2.CREATE VIEW2 emp_sal_view AS SELECT * FROM emp WHERE sal>2000 WITH CHECK OPTION;3.CREATE VIEW3 emp_dept_view AS SELECT empno,ename,dname FROM emp,dept WHERE emp.deptno=dept.deptno DECLARE v_deptno emp.deptno%TYPE; CURSOR c_emp IS SELECT * FROM emp WHERE deptno=v_deptno; v_emp c_emp%ROWTYPE;BEGIN v_deptno:=&x; OPEN c_emp; LOOP FETCH c_emp INTO v_emp; EXIT WHEN c_emp%NOTFOUND; DBMS_OUTPUT.PUT_LINE(v_emp.empno|' '| v_emp.ename|' '| v_emp.sal |' '| v_deptno); END LOOP; CLOSE c_emp;END;DECLARE CURSOR c_dept_stat IS SELECT deptno,avg(sal) avgsal FROM emp GROUP BY deptno; v_dept c_dept_stat%ROWTYPE;BEGIN OPEN c_dept_stat; LOOP FETCH c_dept_stat INTO v_dept; EXIT WHEN c_dept_stat%NOTFOUND; DBMS_OUTPUT.PUT_LINE(v_dept.deptno|' '|v_dept.avgsal); END LOOP; CLOSE c_dept_stat;END;专心-专注-专业