几个异常:
1.No_data_found (没有找到数据)
2.Too_many_rows (select ... into 语句匹配多个行)
3.被零除 zero_divide
4.value_error
5.自定义例外
----------------------------------------------------
--系统例外:no_data_found
set SERVEROUTPUT ON
declare
pename emp.ename%type;
begin
--查询员工号是1234 的员工姓名
select ename into pename from emp where empno=1234;
exception
when no_data_found then dbms_output.put_line('没有找到该员工');
when others then DBMS_OUTPUT.PUT_LINE('其他的异常');
end;
/
--------------------------------------------------------
--系统例外:too_many_rows
set SERVEROUTPUT ON
declare
--定义变量
pename EMP.ENAME%type;
begin
--查询所有10号部门的员工姓名
select ename into pename from emp where deptno=10;
exception
when too_many_rows then dbms_output.put_line('select 匹配了多行数据');
when others then dbms_output.put_line('其他异常');
end;
/
------------------------------------------------------
--系统例外:被零除 zero_divide
set SERVEROUTPUT ON
declare
--定义一个基本变量
pnum number;
begin
pnum := 1/0;
exception
when zero_divide then dbms_output.put_line('1.零不能作为除数');
dbms_output.put_line('2.零不能作为除数');
when others then dbms_output.put_line('其他例外');
end;
/
----------------------------------------------------------
--系统例外:value_error
set SERVEROUTPUT ON
declare
--定义一个number类型的变量
pnum number;
begin
pnum := 'abc';
exception
when value_error then dbms_output.put_line('算术或者转换错误');
when others then dbms_output.put_line('其他的错误');
end;
/
-------------------------------------------------------------
--自定义例外:查询50号部门的员工姓名
set SERVEROUTPUT ON
declare
--定义光标,代表50号部门的员工姓名
cursor cemp is 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;
end if;
exception
when no_emp_found then dbms_output.put_line('没有找到员工');
when others then dbms_output.put_line('其他的例外');
--oracle自动启动pmon(process monitor)->去关闭资源
close cemp;
end;
/
oracle学习之例外
最新推荐文章于 2024-08-09 17:40:45 发布