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)用替换变量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表中不存在时,用恰当的例外处理程序进行处理。
解决方案 »
- sqlplus 如何直接从命令行传递一个参数给 ACCEPT 指令
- 第一次写触发器,帮我看下哪里有问题了。谢谢!!!
- Oracle 中 JDBC ( oci 和 thin ) 的优缺点 和 特点是什么?
- oracle触发器难题,高手请帮忙
- 【请问】存储过程本来是VALID,为什么运行后从VALID变成INVALID
- 表空间
- 请高手指教!!!!!!!!请问在哪儿可以找到ORACLE的SQL 语句的完整帮助,ORACLE产品本身带吗?
- 请教各位高手如何在SQL中给NULL赋值
- 游标问题
- Oracle 11G R2安装在VM中,性能比独立服务器差吗?
- 求高手指教、
- 数据是怎么写入的,oracle内部运行机制是何?小批量的数据commit,数据存在什么地方?
不过第一题还是贴上来,没写存储过程,你自己琢磨吧。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写的烂就多包涵。