【问题标题】:Procedure to update column values in Oracle在 Oracle 中更新列值的过程
【发布时间】:2014-12-06 15:55:32
【问题描述】:

使用 Oracle 中的过程,我想从输入参数更新表中所有记录的代码字段。例如,如果参数值为100:

代码 256 的第 1 行更改为 101
代码 368 的第 2 行更改为 102
第 3 行代码 624 更改为 103

我试试这个

create or replace PROCEDURE procedure_name (parameter_newcode code%TYPE) AS
 CURSOR cursor_name IS select code from table
                           order by code asc;
  var_newCode code%TYPE;
  BEGIN
  OPEN cursor_name;
  LOOP
  FETCH cursor_name INTO var_newCode;
  EXIT WHEN cursor_name%NOTFOUND;
  var_newCode:=parameter_newcode+1;
  update table set code = var_newCode;
  END LOOP;
  CLOSE cursor_name;
 END procedure_name;

但对每一行返回相同的代码(例如,如果参数是100 - > 101)

【问题讨论】:

    标签: oracle loops stored-procedures plsql


    【解决方案1】:

    在您设置的每个循环中(一次又一次)
    var_newCode:=parameter_newcode+1;
    而且您没有指定要更新哪条记录
    update table set code = var_newCode;

    有些东西

    create or replace PROCEDURE procedure_name (parameter_newcode code%TYPE) AS
     CURSOR cursor_name IS select code from myTable
                               order by code asc;
      var_oldCode code%TYPE;
      var_newCode code%TYPE;
      BEGIN
      var_newCode:=parameter_newcode;
      OPEN cursor_name;
      LOOP
      FETCH cursor_name INTO var_oldCode;
      EXIT WHEN cursor_name%NOTFOUND;
      var_newCode:=var_newCode+1;
      update myTable set code = var_newCode where code = var_oldCode;
      END LOOP;
      CLOSE cursor_name;
     END procedure_name;
    

    应该可以。 (抱歉目前无法测试。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-24
      相关资源
      最近更新 更多