【问题标题】:PL/SQL update using loop使用循环的 PL/SQL 更新
【发布时间】:2018-02-01 00:44:41
【问题描述】:

我必须更新 50 名员工的身份证号码。身份证号码是按顺序排列的

100001, 100002, 100003 ... 100050

我需要用另一个序列系列更新它们,比如

1004001, 1004002, 1004003 ... 1004050

所以,我想使用循环进行更新。但我不明白该怎么做。我正在使用 PL/SQL Developer 和 Oracle。

但是,我正在尝试的是:

DECLARE 
  i number(1); 
  j number(1); 
BEGIN 
  << outer_loop >> 
  FOR i IN 100001..100051 LOOP             

    << inner_loop >>      
    FOR j IN 1..3 LOOP 
      update employees e
      set    e.IDENTIFICATION_NUMBER = j
      where  e.IDENTIFICATION_NUMBER = i;
    END loop inner_loop;          

  END loop outer_loop; 
END; 
/

【问题讨论】:

  • 看起来很简单:update employee set IDENTIFICATION_NUMBER = IDENTIFICATION_NUMBER + 904000?

标签: oracle plsql


【解决方案1】:

您是否正在尝试做这样的事情来用 j 更新 i 的值

 DECLARE 
      i number(1); 
      j number(1); 
    BEGIN 
      j:= 1004001;
      << outer_loop >> 
      FOR i IN 100001..100051 LOOP             

          update employees e
          set    e.IDENTIFICATION_NUMBER = j
          where  e.IDENTIFICATION_NUMBER = i;
          j:=j+1;       

      END loop outer_loop; 
    END; 
    /

【讨论】:

  • 这很有帮助。只需要小修正,j:= 1004001; 应该在循环之前FOR
【解决方案2】:

您是否要将员工编号的前 3 个字符(例如 100001 中的 100)替换为 1004,然后您可以通过运行更新语句来实现,

UPDATE employees
   SET identification_number = '1004'||SUBSTR(identification_number,4)
 WHERE identification_number BETWEEN 100001 AND 100050;

如果你想用 LOOP 来做

BEGIN
    FOR emp_l IN (SELECT identification_number
                    FROM employees
                   WHERE identification_number BETWEEN 100001 AND 100050)
    LOOP
        UPDATE employees
           SET identification_number = '1004'||SUBSTR(emp_l.identification_number,4)
         WHERE identification_number = emp_l.identification_number;
    END LOOP;
END;
/

BEGIN
    FOR emp_id IN 100001..100050
    LOOP
        UPDATE employees
           SET identification_number = '1004'||SUBSTR(emp_id,4)
         WHERE identification_number = emp_id;
    END LOOP;
END;
/

【讨论】:

    猜你喜欢
    • 2012-11-22
    • 2015-10-20
    • 2021-07-07
    • 2020-07-07
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    • 2013-07-21
    • 1970-01-01
    相关资源
    最近更新 更多