实验3PLSQL编程_第1页
实验3PLSQL编程_第2页
实验3PLSQL编程_第3页
实验3PLSQL编程_第4页
实验3PLSQL编程_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

1、.实验3 PL/SQL编程1.处理pl/SQL块定义包含声明、执行和异常错误处理的块查看EMP表中员工编号7788的薪金,生成薪金值,如果薪金低于3000,则将薪金更改为3000,处理NO_DATA_FOUND例外,不输出此类员工。如果要执行缓冲区的内容,可以使用RUN命令或/命令。必须将Serveroutput设置为on2.使用记录类型创建包含Name、salary、job、deptno等组件的记录类型v_record,并确保记录类型的组件的数据类型与EMP表中列的数据类型一致(%type实现)。创建变量类型为v_ record的变量,EMP表中员工编号为7788的ename、sal、job

2、和deptno为变量赋值,以输出变量的组件。3.使用条件语句使用IF语句和CASE语句分别实现以下要求:输入员工编号并修改该员工的工资。如果员工职位为CLERK,则薪金增加100。对于SALESMAN,薪金增加160。对于ANALYST,薪金将增加200。否则,增加300。4.循环显示光标的使用显示简单循环、WHILE循环、FOR循环和游标统计信息,并输出每个部门的人数和平均工资单5.隐式光标可实现以下要求:将部门编号为50的部门地址修改为“BEIJING”。如果部门不存在,则部门编号为50且地址为“BEIJING”的记录将插入到dept表中。6.创建显示员工总数的存储过程emp_count,

3、然后运行存储过程7.编写显示员工信息的存储过程EMP_LIST,然后参考EMP_COUNT存储过程8.通过在scott.emp表和scott.dept表中查找指定员工编号的员工姓名和员工所在部门的姓名来创建函数。9.建立实行dept表格中deptno值更新的触发程式,以重叠更新EMP表格中的对应值。10.实施基本操作,如查看、修改和删除存储过程、函数和触发器。主要算法和程序列表:1.DECLAREv _ EMP no EMP . EMP no % type :=7788;V _ sal emp.sal % TYPEV _ add emp.sal % TYPEBEGIN选择sal into v

4、_ sal from EMP where EMP no=v _ EMP no;IF v_sal3000THEN v _ add:=3000ELSEDBMS _ output . put _ line(sal 3000);END IFupdate EMP set sal=v _ add where EMP no=v _ EMP no;END/2.DeclareType v_record is record(Name emp.ename%type,Salary emp.sal%type、Joemp.job% type,Deptno emp.deptno%type);Empinfo v _ reco

5、rd-定义变量BeginSelect ename、sal、job、deptnoInto empinfo来自EMPWhere empno=7788Dbms_output.put_line(员工||的职务包括:|empinfo.job|薪金示例:|empinfo.salary|部门编号如下:| | empinfo . dept no);End/3.Declarecursor c _ EMP is select * from Scott . EMP for update;V _ increment numberBeginFor v_emp in c_emp loopCase

6、v_emp.deptnowhen 10 then v _ increment :=100;when 20 then v _ increment :=160;when 30 then v _ increment :=200;Else v _ increment:=300End caseupdate Scott . EMP setsal=salv _ increment whereCurrent of c _ empEnd loopEnd4.5.BeginUpdate scott.deptSetloc=beijin where deptno=50If sql%notfound thenInsert

7、 into scott.dept (deptno,loc) values (50,beijin);Dbms_output.put_line(插入成功!);ELSEDbms_output.put_line(更新为总拥有者);End ifEnd6.create or replace procedure EMP _ countAs v _ total numberBegin选择计数(*)into v _ total from Scott . EMP;Dbms_output.put_line(员工总数:| | v _ total);End/SQL execute emp _ count员工总数:15P

8、L/SQL过程已成功完成。SQL begin2 emp _ count3结束;结束。4/员工总数:15PL/SQL过程已成功完成。7.1 create or replace procedure EMP _ list2 AS3 CURSOR emp_cursor IS4 select empno,ename from Scott。EMP5 BEGIN6 FOR Emp_record IN emp_cursor LOOP7 DBMS _ output . put _ line(EMP _ record . empno | | EMP _ record . ename);8 END LOOP9 EM

9、P _ COUNT10 * ENDSQL/进程已创建。8.SQL create or replace procedure select _ EMP2 (v_emp_no IN emp.empno%type)3 IS4v _ EMP _ name EMP . ename % type;5v _ dept _ name dept . dname % type;6 BEGIN7 SELECT EMP。ENAME,DEPT.DNAME8 INTO v_emp_name,v_dept_name9自EMP,深度10 where EMP。dept no=dept . dept no and EMP no=v

10、 _ EMP _ no;11 DBMS _ output . put _ line(v _ EMP _ name | | v _ dept _ name);12 END select _ emp13/进程已创建。SQL EXECUTE select _ EMP(7844);特纳销售PL/SQL过程已成功完成。SQL create or replace trigger update _ dept _ to _ EMP2 AFTER UPDATE ON DEPT FOR EACH ROW3 BEGIN4 IF UPDATING THEN5 update EMP set dept no=: new

11、. dept no6 WHERE DEPTNO=:old。DEPTNO7 END IF8 END update _ dept _ to _ emp9/触发器已创建9.create or replace trigger tr _ reg _ depAFTER update OF deptnoon deptFOR EACH ROWBEGINDBMS_OUTPUT。PUT_LINE(先前的deptno值为|:old.deptno| |,新deptno值为|:new.deptno。update EMP set dept no=: new . dept noWHERE dept no=: old . d

12、ept no;END10.Select object _ name,status from user _ objects where object _ type=function;Select object _ name,status from user _ objects where object _ type=procedure;select object _ name from DBA _ objects where object _ type=trigger;Drop procedure select _ empDROP FUNCTION GET _ AVG _ PAYDROP TRI

13、GGER TR _ REG _ DEP五、扩展问题-创建包含update_sal过程和get_YearSal函数的mypackage程序包create or replace package my package isprocedure update _ sal(name varchar 2,news al number);function get _ years al(name varchar 2)return number;Endcreate or replace package body my package isprocedure update _ sal(name varchar 2,

14、news al number) isBeginupdate EMP set sal=news al where ename=name;Endfunction get _ years al(name varchar 2)return number isV_sal number(7,2);BeginSelect sal * 12 nvl (comm,0)into v _ sal from EMP where ename=name;Return v _ salEndEnd调用执行程序包中的存储过程或函数现在有以下用户表格结构,向表格中添加数据时,将自动生成表格id列的数字:第一步是创建序列,开始的数

15、字为1,每次增量为1,需要按顺序生成序列值。第二步是在将数据插入用户表时触发触发器,在触发器内部调用序列,生成在表id列中指定值的序列值。表格结构为:UserInfo(id、username、userPass)-用户表(用户编号number类型、用户名、用户密码)Create sequence seq_user_id从Start with 1 - 1开始increment by 1;-每个增量为1第二步创建在id列中指定值的触发器Create trigger tr_user_idBefore insert on userFor each rowBeginselect seq _ user _

16、id . nextval into : new . id from dual;End主要算法:1.DECLAREv _ EMP no EMP . EMP no % type :=7788;V _ sal emp.sal % TYPEV _ add emp.sal % TYPEBEGIN选择sal into v _ sal from EMP where EMP no=v _ EMP no;IF v_sal3000THEN v _ add:=3000ELSEDBMS _ output . put _ line(sal 3000);END IFupdate EMP set sal=v _ add where EMP no=v _ EMP no;END/2.DeclareType v_record is record(Name emp.ename%type,Salary emp.sal%

温馨提示

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

评论

0/150

提交评论