首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PLSQL模块用于提高部门的薪资

PLSQL模块用于提高部门的薪资
EN

Stack Overflow用户
提问于 2020-08-02 04:32:18
回答 2查看 1K关注 0票数 0

我要把部门内10名员工的工资提高15%,部门20名增加15%,其他人增加5%,并显示该部门的相应雇员。我可以增加第10和20号部门的薪金,但我不能把其他部门的薪金提高5%。我尝试过使用for循环too.This是一个实践问题。

我的问题是:(显示Dept表中的所有记录。部门工作人员的工资增加15%,部门20人增加15%,其他人增加5%,也显示在该部门工作的相应雇员。使用参数游标和游标与更新子句.)

我的代码:

代码语言:javascript
复制
declare 
cursor sal_increase(v_dno number) is select empno,sal,ename,deptno from emp where deptno=v_dno ;
emp_record sal_increase%rowtype;
begin
OPEN sal_increase(10);
LOOP
FETCH sal_increase INTO emp_record;
EXIT WHEN sal_increase%NOTFOUND;
update emp set sal=sal+sal*0.15 where empno=emp_record.empno;
DBMS_OUTPUT.PUT_LINE(emp_record.ename||' '||emp_record.deptno);
END LOOP;
CLOSE sal_increase;
OPEN sal_increase(20);
LOOP
FETCH sal_increase INTO emp_record;
EXIT WHEN sal_increase%NOTFOUND;
update emp set sal=sal+sal*0.15 where empno=emp_record.empno;
DBMS_OUTPUT.PUT_LINE(emp_record.ename||' '||emp_record.deptno);
END LOOP;
CLOSE sal_increase;
end;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-02 05:45:12

不要忘记来自@粘滞位的未来解决方案。

回到您的要求,我相信您坚持使用一个匿名块和参数化游标。(如果我错了,请纠正我)

如果是的话,我会修改以下内容,它应该为你做工作。

将光标更改为下面,对于其他人,将null作为参数传递,在where子句中,我们可以处理相同的子句。(当值传递为10或20时,它将进行比较,当null时,它将更新除10和20以外的所有值)

代码语言:javascript
复制
CURSOR sal_increase(v_dno NUMBER) IS
      SELECT empno
            ,sal
            ,ename
            ,deptno
      FROM   emp
      WHERE  (   v_dno IS NOT NULL AND deptno = v_dno 
              OR v_dno IS NULL AND deptno NOT IN (10,20)
              );

然后再次调用垫子,就像你对10和20做的那样,

代码语言:javascript
复制
   OPEN sal_increase(v_dno => NULL);
   LOOP
      FETCH sal_increase
         INTO emp_record;
      EXIT WHEN sal_increase%NOTFOUND;
      UPDATE emp SET sal = sal * 0.05 WHERE empno = emp_record.empno;
      dbms_output.put_line(emp_record.ename || ' ' || emp_record.deptno);
   END LOOP;
   CLOSE sal_increase;
票数 1
EN

Stack Overflow用户

发布于 2020-08-02 04:45:23

你根本不需要任何程序代码来做到这一点。这将不必要地严重拖慢它,特别是游标的使用。

相反,只需使用一个简单的UPDATE,其中包含一个CASE表达式,根据部门的不同返回新的薪资。

代码语言:javascript
复制
UPDATE emp
       SET sal = CASE
                   WHEN deptno IN (10, 20) THEN
                     sal * 0.15
                   ELSE
                     sal * 0.05
                 END;

对于输出,只需使用SELECT

代码语言:javascript
复制
SELECT ename || ' ' || deptno
       FROM emp;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63212411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档