本人初学者,这是老师布置的题,各位大侠帮忙啊!!!存储过程
(1)针对emp表,编写存储过程Proc_AddSalary, 为指定的职员增加工资,要求两个输入参数:p_empid 指定员工id,p_salary 是需要增加的工资数量,要求检验员工加薪后工资上限,使用异常处理机制处理,最高为5000元,如果超出,则需要给出提示,并将此员工工资设置为5000元。(提示:参考示例1,但不同的是,本题要求创建存储过程实现相应功能)
(2)编写存储过程Proc_getDepMaxSal,根据用户输入的Depid,从用户表(Emp)中查询此部门下的最高工资,并将此工资数返回给调用者。以下是我写的两个程序,不知道哪儿有问题。第一个是不是再update后应该commit一下?第二个题目要求将工资数返回给调用者,用return(v_sal)还是设置一个inout类型变量?
(1)
Create or replace procedure Proc_AddSalary
(p_empid in integer,p_salary in number)
Is
v_sal NUMBER(5);
sal_exp EXCEPTION;
sal_beyond EXCEPTION;
Begin
update scott.emp set sal=sal+p_salary where empno=p_empid;
select sal into v_sal from scott.emp where empno=p_empid;
IF v_sal IS NULL THEN
RAISE sal_exp;
ELSIF v_sal>5000 THEN
RAISE sal_beyond;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE(TO_CHAR(p_empid)||'无此职工');
WHEN sal_exp THEN
DBMS_OUTPUT.PUT_LINE(TO_CHAR(p_empid)||'工资为空');
WHEN sal_beyond THENDBMS_OUTPUT.PUT_LINE(TO_CHAR(p_empid)||'工资超过5000');
update scott.emp set sal=5000 where empno=p_empid;End Proc_AddSalary;(2)Create or replace procedure Proc_getDepMaxSal
(Depid in integer)
As
v_sal number(5);
Begin
Select Max(sal) into v_sal from emp where deptno=Depid;
Dbms_output.put_line('The Max sal in this dept is'||v_sal);
end Proc_getDepMaxSal;