oracle 存储过程设计题,高手大侠帮忙啊!!!

本人初学者,这是老师布置的题,各位大侠帮忙啊!!!存储过程(1)针对emp表,编写存储过程Proc_AddSalary,为指定的职员增加工资,要求两个输入参数:p_emp... 本人初学者,这是老师布置的题,各位大侠帮忙啊!!!
存储过程
(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 THEN

DBMS_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;
展开
 我来答
百度网友ce9e08b7
2011-07-04 · TA获得超过1870个赞
知道小有建树答主
回答量:1675
采纳率:0%
帮助的人:1156万
展开全部
第一个procedure需要commit的。
第二个一般都是写成function,把最高薪水返回给调用者。如果题目是要求写一个procedure的话,应该把存最高薪水的的变量写成 out ,这样才可以返回一个最高薪水的值给调用者。
追问
首先感谢,然后第二个用out的话怎么写?能不能描述一下?谢谢啦!
百度网友845f74e61
2011-07-04 · TA获得超过6929个赞
知道大有可为答主
回答量:4050
采纳率:50%
帮助的人:1633万
展开全部
仔细看看
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式