oracle监听光标不动,Oracle(光标、例外)

本文介绍了Oracle数据库中PL/SQL的游标使用,包括定义、属性和应用实例,如查询员工姓名和薪水以及批量更新员工工资。同时,详细阐述了异常处理机制,包括系统定义的异常和自定义异常的捕获与处理,通过示例展示了如何在PL/SQL中进行异常管理。
摘要由CSDN通过智能技术生成

1、光标

(1)作用:

当返回多条记录的时候我们就需要用到光标。

(2)属性:

光标是否打开:

%isopen

影响的行数:

%rowcount

找到:

%found

未找到:

%notfound

(3)查询员工的姓名和薪水:

declare

cursor cempis select ename,sal fromemp;--定义光标

pename emp.ename%type;

psal emp.sal%type;

begin

open cemp;--打开游标

loop

fetch cemp into pename,psal;--取一条记录

exit when cemp%notfound;--为空

SYS.DBMS_OUTPUT.PUT_LINE('员工'||pename||'的薪水为'||psal);

end loop;

close cemp;

end;

匿名块已完成

员工SMITH的薪水为800

员工ALLEN的薪水为1600

员工WARD的薪水为1250

员工JONES的薪水为2975

员工MARTIN的薪水为1250

员工BLAKE的薪水为2850

员工CLARK的薪水为2450

员工SCOTT的薪水为3000

员工KING的薪水为5000

员工TURNER的薪水为1500

员工ADAMS的薪水为1100

员工JAMES的薪水为950

员工FORD的薪水为3000

员工MILLER的薪水为1300

(4)给员工加工资:

rem PL/SQL Developer Test Scriptsetfeedback offsetautoprint off

rem Execute PL/SQL Block

declare

cursor cempis select empno,job from emp; --定义光标

pempno emp.empno%type;

pjob emp.job%type;

begin

open cemp;--打开光标

loop

fetch cemp into pempno,pjob;--取一个员工

exit when cemp%notfound;if pjob = 'PRESIDENT' then update emp set sal=sal+1000 where empno=pempno; --判断职位

elsif pjob= 'MANAGER' then update emp set sal=sal+800 where empno=pempno;else update emp set sal=sal+400 where empno=pempno;

endif;

end loop;

close cemp;--关闭光标

commit;--提交

end;/

(5)带有参数的光标:

查看部门的员工姓名:

declare

cursor cemp(dno number)is select ename from emp where deptno=dno;

pename emp.ename%type;

begin

open cemp(20);

loop

fetch cemp into pename;

exit when cemp%notfound;

dbms_output.put_line(pename);

end loop;

close cemp;

end;/

2、例外

(1)系统定义的:

no_data_found(没有找到数据)

too_many_rows(select....into语句匹配多个行)

zero_divide(被零除)

value_error(算术或转换错误)

timeout_on_resource(在等待资源时发生超时,分布式数据库)

declare

pnum number;

begin

pnum := 1/0;

exception

when zero_divide then dbms_output.put_line('1:0不能做分母');

when value_error then dbms_output.put_line('算术或者转换错误');

when others then dbms_output.put_line('其他例外');

end;/

注意:在Oracle中要处理掉所有的例外,如果将例外交给数据库将出错。

(2)自定义例外:

declare

cursor cempis select ename from emp where deptno=50;

pename emp.ename%type;

no_emp_found exception;

begin

open cemp;

fetch cemp into pename;if cemp%notfound then

raise no_emp_found;--抛出例外

endif;

close cemp;

exception

when no_emp_found then dbms_output.put_line('没有找到员工');

when others then dbms_output.put_line('其他例外');

end;/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值