--异常:程序运行过程中出现的错误
--预定义异常:too_many_rows,no_data_found,value_error,others...
--too_many_rows,//返回太多的行数
--sqlcode//异常编号
--sqlerrm//异常信息
--raise_application_error(age1,age2);//age1代表自定义异常编号取值范围(-20000到-20999)//age2代表自定义的异常信息
--自定义异常
--自定义异常的步骤:定义异常--》抛出异常--》处理或者捕获异常
declare
--定义异常
genderError exception;
gender char(3);
begin
gender := '&input';
--定义抛异常时机
if gender not in('男','女') then
raise genderError;--抛出异常
end if;
dbms_output.put_line('sex-->' || gender);
exception
when genderError then
dbms_output.put_line('性别输入异常');
raise_application_error(-20777,'性别输入有误');
end;
declare
v_sal emp.sal%type;
v_empno emp.empno%type;
salError exception;
begin
select sal into v_sal from emp where empno ='&no';
if v_sal < 1000 or v_sal >= 5000 then
raise salError;
end if;
dbms_output.put_line(v_sal);
exception
when salError then
dbms_output.put_line('薪资异常');
raise_application_error(-20336,'薪资异常');
end;
--exception学习
--通过匿名块打印信息
declare
begin
dbms_output.put_line('this is mess');
end;
--查询emp表的信息
select * from emp;
--查询ename如果查出不到数据抛出数据找不到异常
declare
v_name emp.ename%type;
begin
select ename into v_name from emp where empno = &v_empno;
dbms_output.put_line('v_name = ' || v_name);
exception
when no_data_found then
dbms_output.put_line('empno is error');
end;
--查询ename,如果没有查询到数据,插入该数据。
declare
v_no number :=&no;
v_name emp.ename%type;
begin
select ename into v_name from emp where empno = v_no;
dbms_output.put_line('v_name=' || v_name);
exception
when no_data_found then
dbms_output.put_line('no data found');
insert into emp(empno,ename) values (v_no,'jake');
end;
--自定义异常
declare
numException exception;
v_num number := &v_no;
begin
if v_num > 10 then
raise numException ;
end if;
dbms_output.put_line('v_number=' || v_num );
exception
when numException then
dbms_output.put_line('number is small');
raise_application_error(-20555,'num error');
end;