Oracle PL/SQL编程基础——游标、异常应用

1、练习使用游标,包括隐式游标、显式游标和游标FOR循环。

(1)在SCOTT模式下显示工资排名前5的员工的编号、姓名和工资,并将所有执行正确的PL/SQL语句记录下来。
①使用隐式游标。

set serveroutput on
declare
cursor emp_cursor is 
select * from(select * from emp order by sal desc) where rownum<=5;
begin
for emp_row in emp_cursor
loop
dbms_output.put('员工编号 '||emp_row.empno||'   ');
dbms_output.put('姓名 '||emp_row.ename||'   ');
dbms_output.put('工资 '||emp_row.sal||'   ');
end loop;
end;
/

没有结果,因为dbms_output.put只能在一行显示,不能回车,使用最后一行需要为dbms_output.put_line

set serveroutput on
declare
cursor emp_cursor is
select * from(select * from emp order by sal desc) where rownum<=5;
begin
for emp_row in emp_cursor
loop
dbms_output.put('员工编号 '||emp_row.empno||'   ');
dbms_output.put('姓名 '||emp_row.ename||'   ');
dbms_output.put_line('工资 '||emp_row.sal||'   ');
end loop;
end;
/

在这里插入图片描述
②使用显式游标。

declare
cursor emp_cursor  is 
select * from(select * from emp order by sal desc) where rownum<=5;
v_emp emp%rowtype;
begin
open emp_cursor;
fetch emp_cursor into v_emp;
while emp_cursor%found loop
dbms_output.put('员工编号 '||v_emp.empno||'   ');
dbms_output.put('姓名 '||v_emp.ename||'   ');
dbms_output.put_line('工资 '||v_emp.sal||'   ');
end loop;
close emp_cursor;
end;
/

在这里插入图片描述

③使用游标for循环

declare
cursor emp_cursor is select * from(select * from emp order by sal desc) where rownum<=5;
begin
for emp_row in emp_cursor
loop
dbms_output.put('员工编号 '||emp_row.empno||'   ');
dbms_output.put('姓名 '||emp_row.ename||'   ');
dbms_output.put_line('工资 '||emp_row.sal||'   ');
end loop;
end;
/

在这里插入图片描述

2.预定义异常的应用:在SCOTT模式下,由员工编号(员工编号由用户任意输入)查找EMP表中的某一员工的姓名。若查找成功则显示该员工的姓名;若该员工编号不存在、则由教材P136表6-2中系统定义的异常NO_DATA_FOUND,输出用户自定义的错误信息“编号错误,没有找到相应的雇员!”;若发生其他类型的错误,则利用OTHERS子句捕获异常,显示自定义错误消息“发生其他错误”、出错码(SQLCODE)以及出错信息(SQLERRM)。

declare
v_no emp.empno%type:='&no';
v_name emp.ename%type;
begin
select ename into v_name from emp where empno=v_no;
dbms_output.put_line('员工姓名'||v_name);
exception
when no_data_found then 
dbms_output.put_line('编号错误,没有找到相应的雇员!');
when others then
dbms_output.put_line('发生其他错误');
dbms_output.put_line('出错码<'||sqlcode||' >   '||'出错信息'||sqlerrm);
end;
/

在这里插入图片描述

3.自定义异常的应用:自定义一个异常,在SCOTT模式下,如果查找到EMP表中的某一员工(员工编号由用户任意输入)的佣金(COMM字段)为0时,则显示自定义错误消息“该员工的佣金为0”。

declare
comm_0_found exception;
v_comm emp.comm%type;
v_no emp.empno%type:='&no';
begin
select comm into v_comm from emp where empno=v_no;
if v_comm=0 then
raise comm_0_found;
end if;
exception
when comm_0_found then
dbms_output.put_line('该员工的佣金为0');
end;
/

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值