使用过程更新表中的列

Posted

技术标签:

【中文标题】使用过程更新表中的列【英文标题】:update a column in my table by using procedure 【发布时间】:2016-07-04 06:44:50 【问题描述】:
CREATE TABLE employees
(
   ENO        NUMBER (3),
   ENAME      VARCHAR2 (35),
   HIREDATE   DATE,
   SAL        NUMBER (6),
   EXPR       NUMBER (3),
   DEPTNO     NUMBER (3),
   JOB        VARCHAR2 (20),
   COMM       NUMBER (10)
)

,这是我的表结构,我的“COMM”列没有任何值,我想通过使用过程添加基于“SAL”列的值,编写一个添加值的过程

【问题讨论】:

我们应该写你的作业吗? 我正在尝试从 2 天开始 给我一些线索我会做的 Naveen,这个作业在这里完成了 100 次。使用搜索框 先在这里阅读docs.oracle.com/cd/B19306_01/appdev.102/b14261/overview.htm,如果你做不到就回来。在做某事之前,你应该阅读你的演讲和课程材料 【参考方案1】:
CREATE OR REPLACE PACKAGE XX_UPDATETBEMP
AS
   PROCEDURE  XX_UPDATECOMM;
END XX_UPDATETBEMP;



CREATE or REPLACE  PACKAGE BODY XX_UPDATETBEMP

IS
   PROCEDURE   XX_UPDATECOMM
   IS
   BEGIN
      UPDATE emp
         SET comm =
                CASE
                   WHEN sal BETWEEN 30000 AND 50000 THEN .20 * sal
                   WHEN sal BETWEEN 50000 AND 70000 THEN .15 * sal
       WHEN sal BETWEEN 70000 AND 100000 THEN .10 * sal
                END;
   END XX_UPDATECOMM;
END XX_UPDATETBEMP;

【讨论】:

【参考方案2】:
PROCEDURE XX_UDCOMMS IS
    CURSOR C_TBEMP IS
      SELECT * FROM XX_TBEMP;
    l_comm NUMBER;
  BEGIN
    FOR C IN C_TBEMP LOOP
      l_comm := NULL;

      IF C.SAL BETWEEN 30000 AND 49999 THEN
        l_comm := c.sal * 0.2;
      ELSIF C.SAL BETWEEN 50000 AND 79999 THEN
        l_comm := c.sal * 0.15;
      ELSIF C.SAL BETWEEN 80000 AND 99999 THEN
        l_comm := c.sal * 0.1;
      END IF;

      UPDATE XX_TBEMP SET COMM = l_comm WHERE c.eno = eno;
    END LOOP;
  end;

【讨论】:

以上是关于使用过程更新表中的列的主要内容,如果未能解决你的问题,请参考以下文章

使用过程更新表中的列

如何通过比较两个表中的两列来更新表中的列

从保存在列中的表名更新表[重复]

您可以从一个表中的列中调用数据以在 SQL 和 Laravel 中的另一个表中使用吗?

使用 XLRD 从 excel 表中的列中读取 int 值

Laravel 5.4:直接从数据库中的列中减去数字