几个异常:
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('没有找到该员工');
whenothersthen 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 匹配了多行数据');
whenothersthen 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.零不能作为除数');
whenothersthen 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('算术或者转换错误');
whenothersthen dbms_output.put_line('其他的错误');
end;
/
---------------------------------------------------------------自定义例外:查询50号部门的员工姓名
set SERVEROUTPUT ON
declare
--定义光标,代表50号部门的员工姓名
cursor cemp isselect ename from emp where deptno = 50;
pename emp.ename%type;
--自定义例外
no_emp_found exception;
beginopen cemp;
--直接取一个值
fetch cemp into pename;
if cemp%notfound then--抛出例外
raise no_emp_found;
endif;
exception
when no_emp_found then dbms_output.put_line('没有找到员工');
whenothersthen dbms_output.put_line('其他的例外');
--oracle自动启动pmon(process monitor)->去关闭资源
close cemp;
end;
/