在 Oracle 中更新列值的过程

Posted

技术标签:

【中文标题】在 Oracle 中更新列值的过程【英文标题】:Procedure to update column values in 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)

【问题讨论】:

【参考方案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;

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

【讨论】:

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

如何将列值从存储过程中的另一个表更新到表中?

用于连接 Oracle 中多行的列值的 SQL 查询

Oracle函数之LISTAGG

oracle中调用存储过程时传递参数值的3种方式。。

一个基于列值的新列中对应列的添加值

需要帮助修复 Oracle SQL 查询以返回具有最大列值的行