oracle简单编程问题,在线等 急急急!大大悬赏

有雇员表及部门表,表结构如下:雇员表emp(empno,ename,job,sal,deptno)部门表dept(deptno,dname,loc)雇员表emp:empn... 有雇员表及部门表,表结构如下:
雇员表emp(empno,ename,job,sal, deptno)
部门表dept(deptno,dname,loc)
雇员表emp :empno—员工编号,ename—员工姓名,
job—员工工作,sal—员工工资,
部门表dept :deptno—部门编号,dname—部门名称,loc—部门地点。
其中,雇员表emp中deptno记录该员工所在的部门deptno。
1. 根据输入指定员工的姓名,从emp表中查询该员工的
工资,并判断该员工的工资是否高于10000,
如高于10000,则给该员工的工资减少20%。
2.编写一个存储过程update_sal,给雇员加工资,过程有两个参数,
参数deptid为要加薪的部门号,参数add_level为加薪倍数。
如果指定的部门不存在员工,该过程不作任何动作,否则按照倍数更新雇员工资。
3. 创建函数select_name_sal,返回emp表中指定职工的工资和姓名,
如果该职工不存在显示‘无符合要求的记录’。
4.使用显示游标和For循环查询scott.emp表中的记录,
并将工资低于2000的工资增加30%。
5. 创建函数avg_sal,根据部门编号计算该部门所有职工的平均工资。

非常急,求高手解答,在线等
展开
 我来答
匿名用户
推荐于2017-09-06
展开全部
只做了两个
--根据输入指定员工的姓名,从emp表中查询该员工的
--工资,并判断该员工的工资是否高于10000,
--如高于10000,则给该员工的工资减少20%
declare
v_sal emp.sal%type;
v_ename emp.ename%type:=upper('&v_ename');
begin
select sal into v_sal from emp where ename=v_ename;
if v_sal>10000 then
update emp set sal=v_sal*(1-0.2) where ename=v_ename;
end if;
end;

--编写一个存储过程update_sal,给雇员加工资,过程有两个参数,
--参数deptid为要加薪的部门号,参数add_level为加薪倍数。
--如果指定的部门不存在员工,该过程不作任何动作,否则按照倍数更新雇员工资。
create or replace procedure update_sal(
deptid emp.deptno%type,--部门号
add_level number--加薪倍数
)
as
v_num number;
begin
select count(*) into v_num from emp where deptno=deptid;
if v_num>0 then
update emp set sal=sal*add_level where deptno=deptid;
end if;
end;

call update_sal(40,2);--调用存储过程,括号里的数字为部门号和加薪倍数
更多追问追答
追问
兄弟啊,其他的有答案吗,我可以等,你慢慢做出来,表示十分感谢!
追答
3.
create function select_name_sal(
param_empno emp.empno%type,
param_ename out emp.ename%type
)
return emp.ename%type
as
v_sal emp.sal%type;
begin
select ename,sal into param_ename,v_sal from emp where empno=param_empno;
return v_sal;
exception
when no_data_found then
raise_application_error(-20000,'无符合要求的记录');
end;
--调用函数
declare
v_empno emp.empno%type:='&v_empno';
v_ename emp.ename%type;
v_sal emp.sal%type;
begin
v_sal:=select_name_sal(v_empno,v_ename);
dbms_output.put_line('雇员姓名:'||v_ename);
dbms_output.put_line('雇员工资:'||v_sal);
end;
4.
DECLARE
CURSOR emp_cur IS
SELECT empno,ename,sal FROM emp WHERE sal<2000 FOR UPDATE;
BEGIN
FOR emp_row IN emp_cur
LOOP
UPDATE emp SET sal=sal*1.3 WHERE CURRENT OF emp_cur;
END LOOP;
COMMIT;
END;
一次提交不了,还有第五题的
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
优质内容提供者andy
2014-12-11 · TA获得超过1561个赞
知道大有可为答主
回答量:2551
采纳率:72%
帮助的人:761万
展开全部
哇这还要写jdbc连接吗?逻辑上没有太难的
追问
有答案吗。求做?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式