新手 求帮助。

wz8953942 2015-10-03 10:36:42
已oracle原有的EMP表为例 ,我要给这里面的人涨工资,根据不同的职位,但是涨完工资如果超过10万这个度我就要取消这次涨工资。 我用了游标去实现这个问题,根据不同职位这个位置用了 if嵌套循环,但是循环完成后 我怎么在当超过10万后取消这次涨工资,就是前面已经循环更新的数据撤销,还变成原来的工资,并且我能否在if判断职位的时候在外面用FOR让他就循环1次
...全文
146 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wz8953942 2015-10-09
  • 打赏
  • 举报
回复
引用 6楼mayanzs 的回复:
为何不先进行判断,发现超出目标即取消不进行涨工资动作,不超出才进行涨工资!把判断提前!
谢谢,问题已经改过来了
mayanzs 2015-10-08
  • 打赏
  • 举报
回复
为何不先进行判断,发现超出目标即取消不进行涨工资动作,不超出才进行涨工资!把判断提前!
wz8953942 2015-10-06
  • 打赏
  • 举报
回复
declare CURSOR cur_emp is SELECT empno,EJOB, sal FROM emp for update of sal; v_zsal emp.sal%TYPE; v_zemp emp.empno%type; v_zjob emp.EJOB%type; v_sal number; BEGIN if not cur_emp%isopen THEN open cur_emp; end IF; LOOP fetch cur_emp INTO v_zemp,v_zjob, v_zsal; if v_zjob='PRESIDENT' THEN UPDATE emp set sal= sal*1.3 where empno= v_zemp; elsif v_zjob='MANAGER' THEN UPDATE emp set sal= sal*1.2 where empno= v_zemp; else UPDATE emp set sal=sal*1.1 where empno= v_zemp; end if; select sum(sal) into v_sal from emp; dbms_output.put_line(v_sal); if v_sal<100000 THEN dbms_output.put_line('涨工资成功'); exit; else dbms_output.put_line('涨工资失败'); rollback; end if; END LOOP; CLOSE cur_emp; end; 这是我写的,但是目前一更新 就更新的数值不对,例如:PRESIDENT这个职位的人让他涨30%结果就涨10%数值根本对不上。不知道哪里出了问题
wz8953942 2015-10-06
  • 打赏
  • 举报
回复
求帮助啊
X_Crystal 2015-10-05
  • 打赏
  • 举报
回复
判断是否rollback或commit
jdsnhan 2015-10-05
  • 打赏
  • 举报
回复
1、首先说,没有特殊的情况,如每行都有其自己的更新规则,否则,可以不用for 循环的 2、不涨了,直接rollback即可
wz8953942 2015-10-05
  • 打赏
  • 举报
回复
引用 1楼X_Crystal 的回复:
判断是否rollback或commit
直接让他rollback行嘛?

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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