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. 新しい null 許容列を追加します (これを と呼びましょうID)。
  2. ジェネレーター/シーケンスを作成します (それを と呼びましょうGEN_ID)。
  3. NEW.IDが であるときはいつでも、シーケンスから新しい値をフェッチする before update/insert トリガーを作成しますnull
  4. してくださいupdate table set ID = ID。(これにより、キーが入力されます。)
  5. ID列を非ヌルに変更してください。

ボーナス。トリガーは、新しく挿入された行に値を生成するため、そのままにしておくことができます。

于 2012-08-10T10:08:42.847 に答える