【问题标题】:PL/SQL help me making this codePL/SQL 帮我制作这段代码
【发布时间】:2018-08-21 12:56:17
【问题描述】:

使用游标创建 PL / SQL 块以更新员工表上的工资列,来自通过键盘输入的在特定部门工作的员工。 工资按规定涨:

  • 如果员工不满16岁,加薪15%
  • 如果员工工作年限在16-20年之间,加薪20%
  • 如果员工20岁以上,加薪25%

在更新后的员工表上显示employee_id、last_name、旧工作、新薪水。

输入 d_id 的值:30

EMPLOYEE_ID LAST_NAME                  LAMAKERJA     SALARY
----------- ------------------------- ---------- ----------
        119 Colmenares                16.1452239       3000
        118 Himuro                    16.8794705       3120
        116 Baida                     17.7726212       3480
        117 Tobias                    18.1917992       3360
        115 Khoo                      20.3781006       3720
        114 Raphaely                  20.8219362      13200

6 rows selected.

【问题讨论】:

  • 写家庭作业的人显然不明白,在单个 UPDATE 语句中不使用 PL/SQL 执行此操作效率更高。没有理由为此使用游标。这是在教授糟糕的编码风格。
  • 帮我解决这个问题
  • 家庭作业可以这样进行,以在记录中显示一个非常简单的循环。但只要他自己不尝试任何事情,他学会说“请”,没有人会帮忙。
  • 这在解释或清楚地说明要求时也存在问题。如前所述,该问题有 3 个标准,但有 2 个不同的方面:基于年龄的第 1 和第 3,但基于工作年限的第 2。当单个员工满足 0 或 2 个条件时会发生什么。示例:一名 19 岁,工作时间为 2 年。符合 0 个标准。加薪0%? 38岁,工作18年。符合 2 个标准(第 2 和第 3)。获得 20%、25% 或 45% 的加薪?答案可能会彻底改变解决方案的形状。

标签: oracle plsql


【解决方案1】:

让您开始:年龄是一个常见问题,所以让我们假设我的微不足道的计算完成了这项工作。遍历所有员工,检查您被告知的条件并更新员工的工资。最终的SELECT 完全由您决定。

   FOR cur_r
      IN (SELECT employee_id, TRUNC ( (SYSDATE - date_of_birth) / 365.25) age
            FROM employees)
   LOOP
      UPDATE employees e
         SET e.salary =
                  e.salary * CASE
                               WHEN age ... THEN ...
                               WHEN age ... THEN ...
                             END
       WHERE e.employee_id = ...
   END LOOP;

【讨论】:

    猜你喜欢
    • 2021-11-14
    • 2016-11-15
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 2011-05-03
    相关资源
    最近更新 更多