Oracle触发器抛出自定义异常
现有学生表
student(sno int,sname varchar2(20))
成绩表
score(sno int,cno varchar2(10),degree number)
给student编写一个触发器,当删除一个学生信息时将触发该触发器,判断该学生是否已经选课,如果该学生已经选课。将激发一个异常,把无法删除的信息返回给用户。
create or replace trigger tri_delete_student
before delete on student
for each row
declare
num int;
myexp exception;
begin
select count(*) into num from score where sno=:old.sno;
if num>0 then
raise myexp;
end if;
exception
when myexp then raise_application_error(’-20002’, ‘该学生已选课,无法删除’);
end;
在Oracle中,遇到的系统异常都有对应的异常码,在应用系统开发中,用户自定义的异常也可以指定一个异常码和异常信息,Oracle系统为用户预留了自定义异常码,其范围介于-20000到-20999之间的负整数。引发应用程序异常的语法是:
RAISE_APPLICATION_ERROR(异常码,异常信息)