このテーブルは、3 つのデータ列で定義された主キーを持つ Oracle DB にあります。主キー制約を削除して、これらの列のデータが重複する行を許可し、新しい列「id」を作成して、これらの行の自動インクリメント整数 ID を含めたいと考えています。テーブルに追加された新しい行に自動インクリメント ID を追加するシーケンスとトリガーを作成する方法は知っていますが、テーブルに既に存在するすべての行に一意の ID を追加する PL/SQL ステートメントを作成することは可能ですか?
4398 次
4 に答える
5
シーケンスを作成したら:
update mytable
set id = mysequence.nextval;
于 2008-10-28T17:07:43.930 に答える
3
シーケンスに整数のみを使用している場合は、id を rownum で更新できます。例えば
update
table
set id = rownum
次に、シーケンスを次の有効な ID にリセットする必要があります。
于 2008-10-28T16:00:24.583 に答える
2
これはあなたが必要とするものですか?
UPDATE your_table
SET id = your_seq.nextval;
これは、主キーの順序を気にしないことを前提としています。
于 2008-10-28T22:22:04.763 に答える
0
まず、PCTFREE を確認する必要があります...すべての行が長くなるのに十分な余地がありますか?
非常に小さい PCTFREE を選択した場合、またはデータに長さが増加する更新が多数含まれている場合は、更新としてこれを行うためにすべての行の連鎖を開始することがあります。
これを CTAS として実行する方がほぼ確実です。
t1 から seq.nextval, t1.* を選択して、テーブル t2 を作成します。
ドロップ t1
t2 の名前を t1 に変更します。
于 2009-07-13T17:36:32.217 に答える