实验二-PL-SQL编程实验报告_第1页
实验二-PL-SQL编程实验报告_第2页
实验二-PL-SQL编程实验报告_第3页
实验二-PL-SQL编程实验报告_第4页
实验二-PL-SQL编程实验报告_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

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

文档简介

1、湖南第一师范学院信息科学与工程系实验报告课程名称: ORACLE数据库系统及应用实验项目名称:实验二: PL/SQL编程学生姓名:学号:实验项目类型:设计实验地点:成绩评定:指导教师:专业班级:实验时间:年月日一、实验目的与要求:1、掌握PL/SQL 程序设计的基本知识;2、掌握PL/SQL 中 SELECT语句和DML 语句的正确使用方法;3、掌握存储过程、函数、游标、触发器与包的创建与使用。二、实验环境:(硬件环境、软件环境)1.硬件环境:奔PC。2.软件环境: Windows2000操作系统, Oracle 9i。三、实验内容:(原理、操作步骤、程序代码等)任务:1、 编写存储过程, 根

2、据用户输入的部门编号实现在PL/SQL 中逐行显示emp表中该部门员工的工资级别。工资级别是:当工资为空时,为空,工资在1000元以下的为低 ,在1000和3000 之间的为中 ,高于3000元的为高 。要有异常处理(该部门编号不存在)。create or replace procedure review_ep(v_deptno in %type )iscursor c1 is select * from empwhere =v_deptno ;record1 emp%rowtype ;deptno_not_foundexception ;beginopen c1;fetch c1 into

3、record1 ;if(not c1%found ) then raise deptno_not_found;end if;while c1%found loopif nvl,0)1000 then| 工资低 );elsif nvl,0)3000 then工资中等 ); else工资高 ); end if;fetch c1 into record1 ; end loop ;close c1;exception when deptno_not_found then (deptno not found );end;2.有这么一张表temp1 ,他只有一个number(8) 的字段no,由于在创建表

4、时忘记设置主键约束,导致表中有很多重复的记录。请你编写一个存储过程,将表中重复的记录保留一个,删除其余的。create or replace procedure mypro1 iscursor v_cursor is select distinct *from temp1;f_no %type;beginopen v_cursor;fetchv_cursor into f_no;delete from temp1 ;while v_cursor%found loopinsert into temp1 values(f_no);fetchv_cursor into f_no;end loop;c

5、lose v_cursor;end;3.编写一个存储函数,用于判断DEPT 表中某一编号的部门是否存在,若存在此部门编号,则返回 TRUE,否则返回 FALSE。Createor replace function judge_dept (v_deptno %type ) return boolean isv_deptno2 %type:=-1 ;beginselect deptno intov_deptno2 from dept where deptno =v_deptno ;if(v_deptno2-1 ) thenreturn true;else return false;end if;e

6、nd;4、编写一过程, 调用第 3 题的函数判断某一编号的部门是否存在,存在则输出该部门员工的姓名、工作,否则提示不存在此部门或此部门无员工。create or replace procedure dno (v_deptno %type )iscursor c1 is select * from emp where deptno =v_deptno ;record2 emp%rowtype ;v_judge boolean :=false;beginv_judge :=judge_dept (v_deptno );if(v_judge ) thenopen c1;fetch c1 into r

7、ecord2 ;while c1%found loop| |;fetch c1 into record2 ;end loop ;close c1;else (deptno not found);end if;end;5、编写一个触发器,在 DEPT 表执行INSERT 语句后被激发, 此触发器将新部门的编号(deptno) 、名称 (dname) 及执行此操作的用户(USER)、当时的日期(SYSDATE)插入N_DEPT 表(注:此表已 建 好 , 表 结 构 为N_DEPT ( DEPTNONUMBER(4),DNAMEVARCHAR2(10),UNAMEVARCHAR2(20),INDA

8、TE DATE)。create table n_dept(deptno number(4),dname varchar2(10),uname varchar2(20),indate date);create or replace trigger del_empafter insert on deptfor each rowbegininsert into n_dept values(:,:,user,sysdate);end;insert into dept values(60,MMMM,hunan);6、创建触发器CHECK_SAL,禁示对职务为CLERK 的雇员的工资修改值超出1000至2

9、000的范围,即CLERK 职务员工的修改后工资值只能在10002000之间。要求测试该触发器。create or replace trigger update_empafter update on empfor each rowbeginif(: not between 1000 and 2000 and :=CLERK)thenrollback ;end if;end;7、编写一个管理雇员信息的包emp_manapack 。包中有过程或函数如下:1)通过员工编号计算出员工应交个人所得税款2)通过员工编号插入员工3)通过员工编号删除员工4)按工资升序输出所有雇员的应交所得税清单create

10、or replace package emp_man isrecord2 emp%rowtype ;function pers(v_no %type )return number ;procedure counts ;end emp_man ;create or replace package body emp_man isfunction pers(v_no %type )return number isv_sal number :=0;beginselect sal* into v_sal from emp where empno = v_no;return v_sal;end;procedure counts iscursor cursor2 is select * from emp ;record3 emp%rowtype ;v_sal2 number :=0;begin

温馨提示

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

评论

0/150

提交评论