2

我有一个没有唯一 ID 的表。我想创建一个存储过程,将行号作为 ID 添加到每一行,但我不知道如何获取当前行号。这是我到目前为止所做的

CREATE OR ALTER PROCEDURE INSERTID_MYTABLE 
returns (
    cnt integer)
as
declare variable rnaml_count integer;
begin
  /* Procedure Text */
  Cnt = 1;
  for select count(*) from MYTABLE r into:rnaml_count do
   while (cnt <= rnaml_count) do
    begin
     update MYTABLE set id=:cnt
       where :cnt = /*how should I get the rownumber here from select??*/
     Cnt = Cnt + 1; 
     suspend;
    end
end
4

1 回答 1

5

我认为更好的方法是:

  1. 添加新的可空列(我们称之为ID)。
  2. 创建一个生成器/序列(我们称之为GEN_ID)。
  3. NEW.ID创建一个 before update/insert 触发器,该触发器在is时从序列中获取新值null例子
  4. update table set ID = ID。(这将填充键。)
  5. 将列更改ID为不为空。

奖金。触发器可以留在那里,因为它将在新插入的行中生成值。

于 2012-08-10T10:08:42.847 回答