为什么所有人都加了800??

qq_38854634 2017-05-20 04:02:24
set serveroutput on
create or replace procedure addsalary
is
v_id empcopy.employee_id%type;
CURSOR emp_update_cursor
IS
SELECT employee_id,salary,hire_date
FROM empcopy ;
cursor emp_info
is
select employee_id
from empcopy;
BEGIN
open emp_info;
fetch emp_info into v_id;
FOR emp_record IN emp_update_cursor LOOP
IF emp_record.hire_date>=to_date('2005','yyyy') THEN
UPDATE empcopy SET salary=salary + 300 where v_id=emp_record.employee_id;
elsIF emp_record.hire_date>=to_date('2004','yyyy') THEN
UPDATE empcopy SET salary=salary + 400 where v_id=emp_record.employee_id;
else
UPDATE empcopy SET salary=salary + 500 where v_id=emp_record.employee_id;
fetch emp_info into v_id;
END IF;
END LOOP;
END;

set serveroutput on
declare
num1 number:=0;
num2 number:=0;
num3 number:=0;
begin
addsalary();
select count(*) into num1 from empcopy where salary<2000;
select count(*) into num2 from empcopy where salary>=2000 and salary<=5000;
select count(*) into num3 from empcopy where salary>5000;
dbms_output.put_line('目前收入在2000低于2000的员工有'||num1||'人,2000到5000之间有'||num2||'人,5000以上有'||num3||'人!');
end;


为什么所有人都加了800??
...全文
242 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
卖水果的net 2017-05-21
  • 打赏
  • 举报
回复
好的,解决了就好;
壹四 2017-05-21
  • 打赏
  • 举报
回复
楼上大神说得对
qq_38854634 2017-05-21
  • 打赏
  • 举报
回复
解决了,没问题了。多谢。
qq_38854634 2017-05-21
  • 打赏
  • 举报
回复
拷贝HR用户的employees表所有数据到empCopy表中,并运用该表。由于公司今年的盈利水平大幅上涨,故公司总部决定调整员工工资,原来2005年及其以后入职的员工,每人增加300元,2004年及其以后的员工,每人增加400元,2004年之前,每人增加500元。调整empCopy表里面的数据,之后输出“目前收入低于2000的员工有xx人,2000到5000之间有xx人,5000元以上有xx人”,――引入pl/sql,sqlcode的引用,输出语句,变量等。 这是原题目。。
qq_38854634 2017-05-21
  • 打赏
  • 举报
回复
fetch emp_info into v_id; 这句放在end if 后面后,加的就更夸张了。 定义两个游标是为了声明where条件的v_id。
卖水果的net 2017-05-20
  • 打赏
  • 举报
回复
BEGIN open emp_info; fetch emp_info into v_id; FOR emp_record IN emp_update_cursor LOOP IF emp_record.hire_date >= to_date('2005', 'yyyy') THEN UPDATE empcopy SET salary = salary + 300 where v_id = emp_record.employee_id; elsIF emp_record.hire_date >= to_date('2004', 'yyyy') THEN UPDATE empcopy SET salary = salary + 400 where v_id = emp_record.employee_id; else UPDATE empcopy SET salary = salary + 500 where v_id = emp_record.employee_id; fetch emp_info into v_id; END IF; END LOOP; END; 这句,放在 END IF 后面,不能放在 IF 语句中。 PS:为什么你要定义两个游标呢,一个就够了;

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧