oracle异常(预定义异常,自定义异常)
1:编写一段程序,通过输入的员工编码,查询并打印员工的姓名、职位和薪水,并定义异常处理。(预定义异常)
2:获得所有员工的平均工资,如果平均工资大于2000,视为用户定义的异常,提示“员工工资有点高”,否则打印平均工资。(用户定义异常)
3:使用显式游标,(输入一个员工工资数)根据员工工资(sal)参数,查询员工表emp中工资大于等于该参数的员工信息,
显示内容包括员工编码(empno),姓名(ename),工资(sal).用游标无条件循环做(FOR循环来做)。
1.
Declare
v_empno emp.empno%type;
v_ename emp.ename%TYPE;
v_job emp.job%type;
v_sal emp.sal%TYPE;
begin
select ename,job,sal into v_ename, v_job, v_sal from emp where empno='7788'
exception
when NO_DATA_FOUND
dbms_output.put_line('编码不存在');
when TOO_MANY_ROWS then
abms_output.put_line('查找的记录过多');
when others then
abms_output.put_line('其他异常');
end
2.
Declare
v_sal emp.sal%type;
sal_Exception exception;
begin
select avg(sal) into v_sal from emp;
if v_age>2000 then
Raise sal_exception
else
dbms_output.put_line(v_sal);
end if;
exception
when sal_Exception then
Raise_application_error(-20005,'员工工资有点高');
end;
3.
Declare
Cursor cursor_emp is
Select ename,empno,sal from emp where sal=>&v_sal;
v_sal emp.sal%TYPE;
v_ename emp.ename%TYPE;
v_empno emp.empno%type;
begin
open cursor_emp;
loop
fetch cursor_emp v_sal;
exit when cursor_emp%notfound
dbma_ouput.put_line(||编号为:||v_empno||的||v_ename||的工资是:||v_sal);
end loop;
close cursor_emp;
end;