72

データがある既存のテーブルに新しい自動増分プライマリ列を追加したいと思います。それ、どうやったら出来るの?

最初に列を追加し、その後シーケンスを追加しようとしましたが、その列を主キーとして挿入して作成する方法を失いました。

4

4 に答える 4

52

テーブルが呼び出されt1、主キーが呼び出されたとします。id
まず、シーケンスを作成します。

create sequence t1_seq start with 1 increment by 1 nomaxvalue; 

次に、挿入時に増分するトリガーを作成します。

create trigger t1_trigger
before insert on t1
for each row
   begin
     select t1_seq.nextval into :new.id from dual;
   end;
于 2012-07-13T05:11:29.813 に答える
32

列とシーケンスがある場合は、最初に既存のすべての行に新しいキーを入力する必要があります。どのキーがどの行に割り当てられているかは気にしないと仮定します

UPDATE table_name
   SET new_pk_column = sequence_name.nextval;

それが完了したら、主キー制約を作成できます(これは、既存の主キー制約がないか、既存の主キー制約をすでに削除していることを前提としています)

ALTER TABLE table_name
  ADD CONSTRAINT pk_table_name PRIMARY KEY( new_pk_column )

キーを自動的に生成する場合は、トリガーを追加する必要があります

CREATE TRIGGER trigger_name
  BEFORE INSERT ON table_name
  FOR EACH ROW
BEGIN
  :new.new_pk_column := sequence_name.nextval;
END;

古いバージョンのOracleを使用している場合、構文は少し面倒です。

CREATE TRIGGER trigger_name
  BEFORE INSERT ON table_name
  FOR EACH ROW
BEGIN
  SELECT sequence_name.nextval
    INTO :new.new_pk_column
    FROM dual;
END;
于 2012-07-13T05:09:55.930 に答える
19

OracleOTNフォーラムからの引っ掛かり

次のように、altertableを使用して列を追加します。

alter table tableName add(columnName NUMBER);

次に、シーケンスを作成します。

CREATE SEQUENCE SEQ_ID
START WITH 1
INCREMENT BY 1
MAXVALUE 99999999
MINVALUE 1
NOCYCLE;

そして、updateこのように列に値を挿入するために使用します

UPDATE tableName SET columnName = seq_test_id.NEXTVAL
于 2012-07-13T05:10:23.563 に答える
5

Oracle Data Modelerを使用して、自動インクリメントの代理キーを作成できます。

ステップ1.-リレーショナル図を作成する

最初に論理図とエンジニアを作成してリレーショナル図を作成するか、すぐにリレーショナル図を作成することができます。

PKを自動インクリメントするために必要なエンティティ(テーブル)を追加し、PKのタイプを整数として選択します。

手順2.-PK列のプロパティを編集する

PK列のプロパティを取得します。列の名前をダブルクリックするか、[プロパティ]ボタンをクリックします。

[列のプロパティ]ダイアログボックスが表示されます。

[全般]タブ(初めてのデフォルト選択)を選択します。次に、[自動インクリメント]チェックボックスと[ID列]チェックボックスの両方を選択します。

ステップ3.-追加情報

自動増分に関する追加情報は、[自動増分]タブを選択して指定できます。

  • 皮切りに
  • インクリメント
  • 最小値
  • 最大値
  • サイクル
  • キャッシュを無効にする
  • 注文
  • シーケンス名
  • トリガー名
  • トリガーを生成する

PL / SQLで役立つように、通常はシーケンス名を指定することをお勧めします。

[列のプロパティ]ダイアログボックスで[OK]([適用])をクリックします。

[テーブルのプロパティ]ダイアログボックスで[OK]([適用])をクリックします。

表がリレーショナル図に表示されます。

于 2013-04-04T03:33:29.357 に答える