2011-11-08 6 views
3

http://haacked.com/archive/2004/02/28/sql-auto-increment.aspxに以下のアプローチがありますが、PL/SQLで不運がありませんでした。何かご意見は?設定されたライン変数をインクリメントするPL/SQLアップデート

+0

このテーブル内のtable.columnの最大値を見つけることによって、上記のvar1が設定されていることに言及しておきます。 – typhoid

+0

同様の質問[ここ](http://stackoverflow.com/questions/4749669/variable-manipulation-in-oracle/4751469#4751469)です。 – Allan

答えて

1

これがあなたのために良い仕事かもしれないOD後半にVAR1のインクリメントが好きではないよう

update table  
set table.column = var1 = var1 + 1  
where table.column2 = "value'; 

update table 
set table.column = table.column + 1 
where table.column2 = "value'; 

は、あなたが何をされる必要があるかのような音@狼は、シーケンスと言いました。そうでない場合は、これを行うことができます:

カラム2の値は一意であるか、重複しているといいでしょう。

+0

申し訳ありませんが、私はそれを行うことはできません。なぜなら、table.columnの現在の値は一意ではないからです。このアプローチでは、値を1ステップ増やすだけです。私が実際に必要とするのは、これらの特定の列(column2 = "value")を各レコードのすべての列値で一意にする方法です。 – typhoid

+1

@typhoid:あなたの特定のニーズがこの場合どのようなものかはわかりませんが、シーケンスの使用を検討しましたか?シーケンスは、最大値を見つけるオーバーヘッドなしに一意の値を保証します。 'table.column'と' table.column2'の組み合わせを一意にする必要がある場合は、この列のペアにユニーク制約を追加することも検討してください。 – Wolf

2

オリジナルの最大IDを保持するPL/SQLのビット。これは、COL2の他の値のためCOL1と衝突しませんCOL1のためにあなたのユニークなIDを与える

declare 
    n pls_integer; 
begin 
    select max(col1) 
    into n 
    from your table; 

    update your_table 
    set col1 = n + rownum 
    where col2 = 'value'; 
end; 

:ROWNUMを使用すると、カウントをインクリメントする問題を解決します。

2

あなたが提供されたリンクで何が起こっているかに基づいて、私はあなたが本当にしたいことは、このだと思う:これはから始まる、ユニークな整数に「の値」のテーブルの各行を設定します

update your_table  
set your_table.column = rownum 
where your_table.column2 = 'value'; 

1.値はその値に対してのみユニークになります。現在の最大値にrownumを追加すると、既存の値よりも大きい値に設定できます(@ APCの答えに見られるように)。

この列に複数の挿入や更新が同時に発生する可能性がある場合は、これは安全ではないことに注意してください(1回限りの修正としてこれを行うのは大丈夫ですが、定期的なルーチン(コードでは使用しないでください)。その場合は、間違いなくシーケンスを使用する必要があります。

関連する問題