游标作业1


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;

原文地址:https://www.cnblogs.com/humiao/p/1880605.html