实验3PLSQL编程
Oracle数据库实验-PLSQL游标、过程、函数、包的使用

Oracle数据库基础实验5 PL/SQL游标、过程、函数、包的使用【实验学时】2学时【实验目的】1.了解PL/SQL语言中显式游标和隐式游标的概念和属性。
2.了解显式游标和隐式游标的差异。
3.掌握PL/SQL中cursor for循环的使用方法。
4.学会在PL/SQL程序中使用游标来解决实际问题。
5.学会在PL/SQL程序中进行异常处理的方法。
6.练习在PL/SQL中自定义异常。
7.理解过程和函数的作用。
8.学会编写过程、函数、包,并加以调用。
【实验内容】1.用显式游标编写程序,程序的功能是:计算每一个部门的平均工资。
注意异常的处理(例如,分母为0的异常)。
已写入文件afiedt.buf1 declare2 cursor c_dept is select * from dept order by deptno;3 cursor c_emp(p_dept emp.deptno%type)is selectename,sal from emp where deptno=p_dept4 order by ename;5 r_dept dept%rowtype;6 v_ename emp.ename%type;7 v_salary emp.sal%type;8 v_tot_salary emp.sal%type;9 begin10 open c_dept;11 loop12 fetch c_dept into r_dept;13 exit when c_dept%notfound;14dbms_output.put_line('department:'||r_dept.deptno||'-'||r_dept.dname);15 v_tot_salary:=0;16 open c_emp(r_dept.deptno);17 loop18 fetch c_emp into v_ename,v_salary;19 exit when c_emp%notfound;20dbms_output.put_line('name:'||v_ename||'salary:'||v_salary);21 v_tot_salary:=v_tot_salary+v_salary;22 end loop;23 close c_emp;24 dbms_output.put_line('total salary fordept:'||v_tot_salary);25 end loop;26 close c_dept;27* end;SQL> /PL/SQL 过程已成功完成。
PL SQL编程实验

西安邮电大学(计算机学院)课内实验报告实验:PL/SQL编程实验课程:大型数据库系统班级:学号:学生姓名:任课教师:一、实验目的(1)了解PL/SQL语言的结构。
(2)了解PL/SQL变量和常量的声明和使用方法。
(3)学习条件语句的使用方法。
(4)学习分支语句的使用方法。
(5)学习循环语句的使用方法。
(6)学习使用Oracle系统函数。
二、实验内容(1)练习条件语句的使用方法。
(2)练习分支语句的使用方法。
(3)练习循环语句的使用方法。
(4)练习使用Oracle系统函数。
三、实验前准备首先要了解PL/SQL语言是结构化程序设计语言。
块(Block)是PL/SQL程序中最基本的结构,所有PL/SQL程序都是由块组成的。
PL/SQL的块由变量声明、程序代码和异常处理代码3部分组成。
在PL/SQL中,常量和变量在使用前必须声明,可以使用DECLARE对变量进行声明。
四、实验步骤1.使用条件语句条件语句格式:IF <条件表达式> THEN<执行语句> …… <执行语句n>[ELSIF <条件表达式> THEN<执行语句> …… <执行语句n>……ELSE<执行语句>]END IF;执行下列程序,观察结果:SET ServerOutput ON;DECLARENum INTEGER := -11;BEGINIF Num < 0 THENdbms_output.put_line('负数');ELSIF Num >0 THENdbms_output.put_line('正数');ELSEdbms_output.put_line('0');END IF;END;2.使用分支语句分支语句格式:CASE <变量>WHEN <表达式1> THEN 值1WHEN <表达式2> THEN 值2……WHEN <表达式n> THEN 值nELSE 值n + 1END;执行下列程序,观察结果:SET ServerOutput ON;DECLAREvarDAY INTEGER := 3;Result VARCHAR2(20);BEGINResult := CASE varDAYWHEN 1 THEN '星期一'WHEN 2 THEN '星期二'WHEN 3 THEN '星期三'WHEN 4 THEN '星期四'WHEN 5 THEN '星期五'WHEN 6 THEN '星期六'WHEN 7 THEN '星期七'ELSE '数据越界'END;dbms_output.put_line(Result);END;3.使用循环语句(1)循环语句格式1:LOOP<程序块1>IF <条件表达式> THENEXITEND IF<程序块2>END LOOP;执行下列程序,观察结果:SET ServerOutput ON;DECLAREv_Num INTEGER := 1;v_Sum INTEGER := 0;BEGINLOOPv_Sum := v_Sum + v_Num;dbms_output.put_line(v_Num);IF v_Num = 3 THENEXIT;END IF;dbms_output.put_line(' + ');v_Num := v_Num + 1;END LOOP;dbms_output.put_line(' = ');dbms_output.put_line(v_Sum);END;(2)循环语句格式2:LOOP<程序块1>EXIT WHEN <条件表达式><程序块2>END LOOP;执行下列程序,观察结果:SET ServerOutput ON;DECLAREv_Num INTEGER := 1;v_Sum INTEGER := 0;BEGINLOOPv_Sum := v_Sum + v_Num;dbms_output.put_line(v_Num);EXIT WHEN v_Num = 3;dbms_output.put_line(' + ');v_Num := v_Num + 1;END LOOP;dbms_output.put_line(' = ');dbms_output.put_line(v_Sum); END;(3)循环语句格式3:WHILE <条件表达式>LOOP<程序块>END LOOP;执行下列程序,观察结果:SET ServerOutput ON;DECLAREv_Num INTEGER := 1;v_Sum INTEGER := 0;BEGINWHILE v_Num <= 3LOOPv_Sum := v_Sum + v_Num;dbms_output.put_line(v_Num);IF v_Num < 3 THENdbms_output.put_line(' + ');END IF;v_Num := v_Num + 1;END LOOP;dbms_output.put_line(' = ');dbms_output.put_line(v_Sum); END;(4)循环语句格式4:FOR <循环变量> IN <初始值> ..<终止值>LOOP<程序块>END LOOP;执行下列程序,观察结果:SET ServerOutput ON;DECLAREv_Num INTEGER;v_Sum INTEGER := 0;BEGINFOR v_Num IN 1..3LOOPv_Sum := v_Sum + v_Num;dbms_output.put_line(v_Num);IF v_Num < 3 THENdbms_output.put_line(' + ');END IF;END LOOP;dbms_output.put_line(' = ');dbms_output.put_line(v_Sum);END;4.使用系统函数常用函数有:数值型函数,字符型函数,日期型函数,统计函数五、实验结果六.评价分析及心得体会通过本次试验我学会了条件语句,分支语句,及循环语句的使用方法。
plsql编程

5.游标的使用
提取游标数据: 提取游标数据:就是检索结果集合中的数据行, 放入指定的输出变量中。 格式: FETCH cursor_name INTO {variable_list | record_variable };
5.游标的使用
关闭游标: 关闭游标:当提取和处理完游标结果集合数据后, 应及时关闭游标,以释放该游标所占用的系统资 源,并使该游标的工作区变成无效,不能再使用 FETCH 语句取其中数据。关闭后的游标可以使用 OPEN 语句重新打开。 格式: CLOSE cursor_name;
6.创建和调用存储过程
创建过程语法格式: 创建过程语法格式
CREATE [OR REPLACE] PROCEDURE Procedure_name [ (argment [ { IN | IN OUT }] Type, argment [ { IN | OUT | IN OUT } ] Type ] { IS | AS } <类型.变量的说明> BEGIN <执行部分> EXCEPTION <可选的异常错误处理程序> END;
5.游标的使用
游标属性
%FOUND:布尔型属性,当最近一次读记录时成 功返回,则值为TRUE; %NOTFOUND:布尔型属性,与%FOUND相反; %ISOPEN:布尔型属性,当游标已打开时返回 TRUE; %ROWCOUNT:数字型属性,返回已从游标中读 取的记录数 。
6.创建和调用存储过程
创建带输入参数和输出参数的存储过程
调用p4: declare a varchar2(10):='001'; b number; c number; begin p4(a,b,c); dbms_output.put_line(b||'--'||c); end;
第三篇PLSQL编程

第三章PL/SQL编程3.1 PL/SQL基础知识3.1.1 什么是PL/SQL一、什么是PL/SQL?结合了Oracle进程语言和结构化查询语句的一种扩编语言。
利用PL/SQL能够编写具有很多高级功能的程序,尽管通过量个SQL语句也能实现一样的功能,可是相较而言,PL/SQL具有更为明显的一些优势二、在PL/SQL块中能够利用SELECT、INSERT、UPDATE、DELETE等DML 语句、事物操纵语句和SQL函数等。
PL/SQL块不许诺直接利用CREATE、DROP或ALTER等DDL语句,但能够通过动态SQL来执行它们。
三、PL/SQL块的结构声明部份执行部份异样处置部份四、常量和变量的声明语法是什么?变量:Variable_name data_type[ (size) ] [ := init_value ];常量:Variable_name CONSTANT data_type := value;。
四、完成例如1操作步骤:1.在jbit用户下创建表employee,导入数据2. 执行语句--方式一:通过SELECT INTO给变量赋值DECLAREv_ename VARCHAR2(20);v_rate NUMBER(7,2);c_rate_incr CONSTANT NUMBER(7,2):=1.10;BEGINSELECT ename, sal* c_rate_incr INTO v_ename, v_rateFROM employeeWHERE empno='7788';添加输出显示语句,参考P81 例如2中的“DBMS_OUTPUT.PUT_LINE()”语句DBMS_OUTPUT.PUT_LINE('姓名:'||v_ename||'工资:'||v_rate);END;显示结果图:(请截图)--方式二:通过赋值操作符“:=”给变量赋值DECLAREv_ename VARCHAR2(20);v_rate NUMBER(7,2);c_rate_incr CONSTANT NUMBER(7,2):=1.10;BEGINv_ename:='SCOTT';DBMS_OUTPUT.PUT_LINE('姓名:'||v_ename);END;显示结果图:(请截图)3.1.2 PL/SQL数据类型一、PL/SQL支持哪两种属性类型?请详细说明。
PL SQL编程 Oracle数据库实验报告

PL/SQL编程【实验目的】1.熟悉PL/SQL的数据类型和书写规则2.熟悉控制结构和游标的使用3.编写和运行函数、过程和触发器【实验内容】编写脚本文件,调试运行脚本文件,并记录结果。
1.在SQL*Plus中编写一个PL/SQL块,功能用于打印学生信息在DECLARE部分完成:(1)建立学生信息记录类型stu_record_type,包括学号,姓名,性别,籍贯,学习成绩和活动成绩。
均为可变长字符类型(2)编写本地子过程:学生信息打印过程PrintStuRecord,把(1)中定义的记录类型作为参数(3)定义学生信息记录变量stu_record在BEGIN…END部分完成:(1)为stu_record变量的各个元素赋值如下:学号:‘2001001’姓名:’李新’性别:‘m’籍贯:‘黑龙江省哈尔滨市’学习成绩:‘Excellent’活动成绩:‘Good’(2)对该变量的调用打印过程,输出到屏幕2.建立对bookinfo表的DML触发器,一旦bookinfo表发生了任何变化,立即触发,对bookinfo表的数据进行统计,结果存储在数据统计表中(1)如果没有则建立bookinfo表,选择建立在scott用户下,表结构为(bookno varchar2(36) Primary key,bookname varchar2(40) not null,authorname varchar2(10) not null,publishtime date,bookprice float)(2)建立数据统计表major_stats,包含两个字段:书的总数和作者的总数(3)创建触发器UpdateMajorStats,完成在bookinfo表中插入、删除和修改记录之后,对bookinfo表进行统计,结果存储在(2)建立的major_stats表中(4)在bookinfo表中插入、删除和更新信息,再查看major_stats表中数据的变化【实验结论】编写脚本文件,调试运行脚本文件,并记录结果。
实验3:三轮乱弄版

Oracle数据库管理与开发I实验报告系所:专业:学生姓名:学生学号:提交日期:大连东软信息学院Dalian Neusoft University of Information[实验名称]:利用PLSQL进行系统功能模块的开发[实验日期]:[实验目的]:掌握PL/SQL程序设计[实验要求]:按要求利用PL/SQL进行功能模块开发[实验步骤描述]:1.编写一个PL/SQL块,输出所有员工的员工姓名、员工号、工资和部门号。
declarecursor c_emp isselect * from employees;beginfor v_emp in c_emp loopdbms_output.put_line(v_emp.first_name||'' ||v_emp.employee_id||' '||v_emp.department_id||' '||v_emp.salary);endloop; end;2.编写一个PL/SQL块,输出所有比本部门平均工资高的员工信息。
declarev_avg employees.salary%type;beginfor v_emp in (select * from employees) loopselectavg(salary) into v_avg from employees where department_id = v_emp.department_id;if v_emp.salary >= v_avg thendbms_output.put_line(v_emp.employee_id||''||v_emp.first_name||''|| v_emp.salary ||''|| v_emp.department_id); endif;endloop;end;3.写一个PL/SQL块,输出所有员工及其部门领导的姓名、员工号及部门号。
实验三 PLSQL编程基础

实验三PL/SQL编程基础开发语言及实现平台或实环境Oracle 11g实验目的(1) 掌握PL/SQL 块结构、PL/SQL 的基本语法、PL/SQL 的控制结构。
(2) 掌握PL/SQL 块中使用复合数据类型。
(3) 掌握PL/SQL 异常处理技术。
实验要求(1) 记录执行命令和操作过程中遇到的问题及解决方法,注意从原理上解释原因。
(2) 记录利用SQL*Plus或iSQL*Plus编写、执行PL/SQL 程序的命令。
实验内容运行1.2.3中的程序,查看运行结果,体会pl/sql语句的语法结构和运行结果。
完成4.5.6.及7.8中任选一个中的代码的编写。
1 利用LOOP 循环方式计算1+3+5+7+9。
代码如下:SET SERVEROUTPUT ONDECLAREi NUMBER;sum1 NUMBER;BEGINi:=1;sum1:=0;LOOPIF mod(i,2)!=0 THENsum1:=sum1+i;END IF;i:=i+1;IF(i>9) THENEXIT;END IF;END LOOP;DBMS_OUTPUT.PUT_LINE(sum1);END;2.利用记录类型将emp表的某条信息显示出来。
代码如下:SET SERVEROUTPUT ONDECLAREE_name emp.ename%type;E_no emp.empno%type;E_sal emp.sal%type;E_deptno emp.deptno%type;E_hiredate emp.hiredate%type;BEGINselect empno,ename,hiredate,sal,deptno INTO E_no,E_name,E_ hiredate,E_sal , E_deptno FROM emp WHERE empno='7788';DBMS_OUTPUT.PUT_LINE(E_no||E_name || E_hiredate || E_sal || E_deptno);end;/请利用%rowTYPE重做本例,注意三者的差别。
Oracle SQL PLSQL实验

实验1SQL*Plus的使用和基本SELECT语句实验要求(1)掌握SQL*Plus的基本使用(2)掌握SELECT语句的简单用法。
实验条件自我实践实验时间大约60分钟1.练习1 FOLLOW ME●时间20分钟●实验步骤(1)观看第1章教学视频。
(2)实践视频中的实例。
2.练习2●时间40分钟●实验步骤(1)登录到SQL*Plus,初始用户名为:SCOTT,口令为TIGER。
(2)分别显示EMP、DETP、SALGRADE表结构,并察看表中的数据。
(3)创建一个查询显示每个雇员的姓名、工作、受雇日期及雇员编号,并且要将雇员编号作为第一列显示。
最后将该SQL语句保存成文件p1q1.sql,并执行该脚本文件。
(4)将脚本文件p1q1.sql调取到SQL缓冲区,并将列标题设置为Emp #,Employee,Job及Hire Date,将该SQL语句保存成文件p1q2.sql,最后返回查询结果。
思考练习题1.SQL*Plus命令是用于访问数据库的吗?2.下面的SELECT语句能成功执行吗?SQL>SELECT ename,job,sal Salary2FROM emp;3.下面的语句有3处错误,请纠正它们。
SQL>SELECT empno,ename2Salary x 12 ANNUAL SALARY3FROM emp;4.创建一个查询从EMP表中检索出不重复的工作名称。
5.用一个逗号和一个空格将姓名和工作连接后作为一个整体输出,显示的列标题为Employee and Title。
6.创建一个查询,用逗号将表中所有字段的信息连接作为一个整体输出,输出的列标题为THE_OUTPUT。
实验2使用WHERE和ORDER BY子句实验要求(1)掌握WHERE子句的用法。
(2)掌握ORDER BY子句的用法。
实验条件自我实践实验时间大约60分钟1.练习1FOLLOW ME●时间20分钟●实验步骤(1)观看第2章教学视频。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三PL/SQL编程1.PL/SQL块处理定义一个包含声明、执行和异常处理的块查询EMP表中职工号7788的工资,输出工资的值并且如果工资小于3000那么把工资更改为3000,异常部分对NO_DATA_FOUND异常进行处理,输出没有该员工。
如果想运行缓冲区的内容,那么可以用RUN命令或者/命令;serveroutput需要设置为on 2.记录类型的使用创建一个记录类型v_record,类型包含name,salary,job,deptno等分量,要求记录类型的分量的数据类型和emp表中列的数据类型一致(%type实现)。
创建一个变量,变量类型为v_record,读取EMP表中职工号为7788的ename,sal,job,deptno为该变量赋值,输出变量的分量。
3.条件语句的使用分别用IF语句和CASE语句实现以下要求:输入一个员工号,修改该员工的工资,如果该员工职位是CLERK,工资增加100;若为SALESMAN,工资增加160;若为ANALYST,工资增加200;否则增加300。
4. 循环和显示游标的使用分别用简单循环、WHILE循环、FOR循环以及显示游标统计并输出各个部门的人数以及平均工资5.用隐式游标实现以下要求:修改部门号为50的部门地址为‘BEIJING’。
如果该部门不存在,则向dept表中插入一个部门号为50,地址为‘BEIJING’的记录。
6.创建一个显示雇员总人数的存储过程emp_count,并执行该存储过程7. 编写显示雇员信息的存储过程EMP_LIST,并引用EMP_COUNT存储过程8. 创建函数,实现功能为:在scott.emp表和scott.dept表中查询出任意给定职工号的职工姓名及职工所在部门的名称。
9. 创建触发器,实现更新dept表中的deptno值,级联更新emp表中相应值。
10. 对存储过程、函数及触发器实现查看、修改、删除等基本操作。
主要算法和程序清单:1.DECLAREv_empno emp.empno%TYPE:=7788;v_sal emp.sal%TYPE;v_add emp.sal%TYPE;BEGINSELECT sal INTO v_sal FROM emp WHERE empno=v_empno;IF v_sal<3000THEN v_add:=3000;ELSEdbms_output.put_line('sal>3000');END IF;UPDATE emp SET sal=v_add WHERE empno=v_empno;END;/2.declaretype v_record is record (name emp.ename%type,salary emp.sal%type,job emp.job%type,deptno emp.deptno%type);empinfo v_record;--定义变量beginselect ename,sal,job,deptnointo empinfofrom empwhere empno = 7788;dbms_output.put_line('雇员'||||'的职务是:'||empinfo.job||'工资是:'||empinfo.salary||'部门号是:'||empinfo.deptno);end;/3.declarecursor c_emp is select * from scott.emp for update;v_increment number;beginfor v_emp in c_emp loopcase v_emp.deptnowhen 10 then v_increment:=100;when 20 then v_increment:=160;when 30 then v_increment:=200;else v_increment:=300;end case;update scott.emp set sal = sal+v_increment where current of c_emp;end loop;end;4.5.beginupdate scott.deptset loc = 'BEIJING' where deptno=50;if sql%notfound theninsert into scott.dept(deptno,loc) values(50,'BEIJING');dbms_output.put_line('插入成功!');ELSEdbms_output.put_line('更新成共');end if;end;6.create or replace procedure emp_countas v_total number;beginselect count(*) into v_total from scott.emp;dbms_output.put_line('雇员总数:'||v_total); end;/SQL> execute emp_count;雇员总数:15PL/SQL 过程已成功完成。
SQL> begin2 emp_count;3 end;4 /雇员总数:15PL/SQL 过程已成功完成。
7.1 CREATE OR REPLACE PROCEDURE EMP_LIST2 AS3 CURSOR emp_cursor IS4 SELECT empno,ename FROM scott.emp;5 BEGIN6 FOR Emp_record IN emp_cursor LOOP7 DBMS_OUTPUT.PUT_LINE(Emp_record.empno||Emp_record.ename);8 END LOOP;9 EMP_COUNT;10* END;SQL> /过程已创建。
8.SQL> CREATE OR REPLACE PROCEDURE select_emp2 (v_emp_no IN emp.empno%type)3 IS4 v_emp_name emp.ename%type;5 v_dept_name dept.dname%type;6 BEGIN7 SELECT EMP.ENAME,DEPT.DNAME8 INTO v_emp_name, v_dept_name9 FROM EMP,DEPT10 WHERE EMP.DEPTNO=DEPT.DEPTNO AND EMPNO = v_emp_no;11 DBMS_OUTPUT.PUT_LINE(v_emp_name||' '||v_dept_name);12 END select_emp;13 /过程已创建。
SQL> EXECUTE select_emp(7844);TURNER SALESPL/SQL 过程已成功完成。
SQL> CREATE OR REPLACE TRIGGER update_dept_to_emp2 AFTER UPDATE ON DEPT FOR EACH ROW3 BEGIN4 IF UPDATING THEN5 UPDATE EMP SET DEPTNO = :new.DEPTNO6 WHERE DEPTNO=:old.DEPTNO;7 END IF;8 END update_dept_to_emp;9 /触发器已创建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 deptno = :new.deptnoWHERE deptno = :old.deptno;END;10.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_emp;DROP FUNCTION GET_AVG_PAY;DROP TRIGGER TR_REG_DEP;五、拓展题--创建一个包mypackage,声明该包有一个过程update_sal和一个函数get_YearSalcreate or replace package myPackage isprocedure update_sal(name varchar2,newsal number);function get_YearSal(name varchar2) return number;end;create or replace package body myPackage isprocedure update_sal(name varchar2,newsal number) isbeginupdate emp set sal=newSal where ename=name;end;function get_YearSal(name varchar2) return number isv_sal number(7,2);beginselect sal*12+nvl(comm,0) into v_sal from emp where ename=name;return v_sal;end;end;调用执行包中的存储过程或函数我们现在有这样一张用户表表结构如下,希望向表中增加数据时,表中id列的数字自动生成。
第一步创建序列,要求开始的数字为1,每次递增1,按顺序产生序列值;第二步创建一个触发器,向用户表中插入数据的时候触发触发器,在触发器内部调用序列并生成一个序列值赋值给表的id列。
表结构如下:UserInfo(id ,username,userPass)--用户表(用户编号number类型,用户名,用户密码)create sequence seq_user_idstart with 1 --从1开始increment by 1;--每次增量为1第二步创建一个触发器给id列赋值create trigger tr_user_idbefore insert on userfor each rowbeginselect seq_user_id.nextval into :new.id from dual; end;主要算法:1.DECLAREv_empno emp.empno%TYPE:=7788;v_sal emp.sal%TYPE;v_add emp.sal%TYPE;BEGINSELECT sal INTO v_sal FROM emp WHERE empno=v_empno;IF v_sal<3000THEN v_add:=3000;ELSEdbms_output.put_line('sal>3000');END IF;UPDATE emp SET sal=v_add WHERE empno=v_empno;END;/2.declaretype v_record is record (name emp.ename%type,salary emp.sal%type,job emp.job%type,deptno emp.deptno%type);empinfo v_record;--定义变量beginselect ename,sal,job,deptnointo empinfofrom empwhere empno = 7788;dbms_output.put_line('雇员'||||'的职务是:'||empinfo.job||'工资是:'||empinfo.salary||'部门号是:'||empinfo.deptno);end;/3.declarecursor c_emp is select * from scott.emp for update;v_increment number;beginfor v_emp in c_emp loopcase v_emp.deptnowhen 10 then v_increment:=100;when 20 then v_increment:=160;when 30 then v_increment:=200;else v_increment:=300;end case;update scott.emp set sal = sal+v_increment wherecurrent of c_emp;end loop;end;4.5.beginupdate scott.deptset loc = 'BEIJING' where deptno=50;if sql%notfound theninsert into scott.dept(deptno,loc) values(50,'BEIJING');dbms_output.put_line('插入成功!');ELSEdbms_output.put_line('更新成共');end if;end;6.create or replace procedure emp_countas v_total number;beginselect count(*) into v_total from scott.emp;dbms_output.put_line('雇员总数:'||v_total); end;/SQL> execute emp_count;雇员总数:15PL/SQL 过程已成功完成。