首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有什么原因这比我想要的要高吗?

有什么原因这比我想要的要高吗?
EN

Stack Overflow用户
提问于 2017-05-05 03:27:23
回答 1查看 41关注 0票数 1

我不确定这是不是比应该循环的更多,或者我的数字是否错了,但它应该是:

如果部门10岁,工资高于2000,则加薪6%,否则加薪7%。如果部门为20岁,工资大于2500,则加薪5%,否则加薪5.5%。如果部门30岁,工资大于1000,则加薪7%,否则加薪6.5%。

下面是代码:

代码语言:javascript
复制
DECLARE
    v_deptno        empbackup.deptno%TYPE;
    v_sal           empbackup.sal%TYPE;
    CURSOR raise IS
        SELECT deptno, sal
        FROM empbackup
        FOR UPDATE OF sal;

BEGIN
    OPEN raise;
    FETCH raise INTO v_deptno, v_sal;

    WHILE raise%FOUND LOOP
        IF v_deptno = 10 AND v_sal > 2000 THEN
            v_sal := v_sal * 1.06;
        ELSE
            v_sal := v_sal * 1.07;
        END IF;

        IF v_deptno = 20 AND v_sal > 2500 THEN
            v_sal := v_sal * 1.05;
        ELSE
            v_sal := v_sal * 1.055;
        END IF;

        IF v_deptno = 30 AND v_sal > 1000 THEN
            v_sal := v_sal * 1.07;
        ELSE
            v_sal := v_sal * 1.065;
        END IF;

        UPDATE empbackup
        SET sal = v_sal
        WHERE CURRENT OF raise;

        FETCH raise INTO v_deptno, v_sal;
    END LOOP;

    CLOSE raise;
END;
/
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-05 05:40:16

问题在于您的IF。部门检查和薪资检查不应该放在一个IF中。否则,与部门20的一行将转到第一和第三IFELSE部分和第二IFIF部分。下面的代码将有效。

代码语言:javascript
复制
DECLARE
   v_deptno   empbackup.deptno%TYPE;
   v_sal      empbackup.sal%TYPE;

   CURSOR raise
   IS
          SELECT deptno, sal
            FROM empbackup
      FOR UPDATE OF sal;
BEGIN
   OPEN raise;

   FETCH raise
   INTO v_deptno, v_sal;

   WHILE raise%FOUND
   LOOP
      IF v_deptno = 10
      THEN
         IF v_sal > 2000
         THEN
            v_sal := v_sal * 1.06;
         ELSE
            v_sal := v_sal * 1.07;
         END IF;
      END IF;

      IF v_deptno = 20
      THEN
         IF v_sal > 2500
         THEN
            v_sal := v_sal * 1.05;
         ELSE
            v_sal := v_sal * 1.055;
         END IF;
      END IF;

      IF v_deptno = 30
      THEN
         IF v_sal > 1000
         THEN
            v_sal := v_sal * 1.07;
         ELSE
            v_sal := v_sal * 1.065;
         END IF;
      END IF;

      UPDATE empbackup
         SET sal = v_sal
       WHERE CURRENT OF raise;

      FETCH raise
      INTO v_deptno, v_sal;
   END LOOP;

   CLOSE raise;
END;
/
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43796009

复制
相关文章

相似问题

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