1,编写一个存储过程,检查SCOTT用户下emp表中所有雇员的工资是否在规定范围内。不同职位的工资范围为: CLERK为1500-2500,SALESMAN为800-5000,MANAGER为3000-4500,ANALYST为2500-3500,对PRESIDENT的工资不做限定。输出所有工资不在此范围内的部门号、雇员号、名字。2,写出从HR方案雇员表EMPLOYEES中查询给定公子雇员名字LAST_NAME的PL/SQL程序块,该程序要符合如下要求:
(1)用替换变量p_salary提供要查找的工资值。
(2)如果与给定工资相符的雇员有多个,捕获该例外并输出字符串“More than one employee with a salary of<salary>.”
(3)如果没有与给定工资相符的雇员,捕获该例外并输出字符串“No employee with a salary of<salary>.”
(4)如果恰好有一个雇员的公子SALARY与给定工资相符,输出该雇员的名字和工资。
(5)对于其他情况,输出字符串“Some other error occurred.”3,在HR方案中创建一个名为UPDATE_JOB的存储过程修改JOBS表中的职位名称job_title,对应的职位代码job_id和要修改的职位名称job_title由参数提供。当参数给定的职位代码在JOBS表中不存在时,用恰当的例外处理程序进行处理。

解决方案 »

  1.   

    帮你做了第一题,但是看到结贴率这么低,就算了。
    不过第一题还是贴上来,没写存储过程,你自己琢磨吧。DECLARE
      v_job    emp.job%TYPE;
      v_name   emp.ename%TYPE;
      v_empno  emp.empno%TYPE;
      v_deptno emp.deptno%TYPE;
      v_sal    emp.sal%TYPE;
      CURSOR emp_cursor IS
        SELECT ename, empno, deptno, job, sal FROM emp;
    BEGIN
      OPEN emp_cursor;
      LOOP
        FETCH emp_cursor
          INTO v_name, v_empno, v_deptno, v_job, v_sal;
        EXIT WHEN emp_cursor%NOTFOUND;
        IF v_job = 'CLERK' THEN
          CASE
            WHEN v_sal < 1500 OR v_sal > 2500 THEN
              dbms_output.put_line(v_name || ',' || v_empno || ',' || v_deptno||','||v_sal);
          END CASE;
        ELSIF v_job = 'SALEMAN' THEN
          CASE
            WHEN v_sal < 800 OR v_sal > 5000 THEN
              dbms_output.put_line(v_name || ',' || v_empno || ',' || v_deptno||','||v_sal);
          END CASE;
        ELSIF v_job = 'MANAGER' THEN
          CASE
            WHEN v_sal < 3000 OR v_sal > 4500 THEN
              dbms_output.put_line(v_name || ',' || v_empno || ',' || v_deptno||','||v_sal);
          END CASE;
        ELSIF v_job = 'ANALYST' THEN
          CASE
            WHEN v_sal < 2500 OR v_sal > 3500 THEN
              dbms_output.put_line(v_name || ',' || v_empno || ',' || v_deptno||','||v_sal);
          END CASE;
        ELSIF v_job = 'PRESIDENT' THEN
          NULL;
        END IF;
      END LOOP;
      CLOSE emp_cursor;
    END;注:本人也是刚学Oracle,SQL写的烂就多包涵。