25

以前の VIEW から 2 つのフィールドを持つ USERLOG という名前の新しいテーブルを作成しました。テーブルはすでに約 9000 レコードで構成されています。VIEW から取得される 2 つのフィールド、つまり weblog_views は IP (IP アドレスで構成される) と WEB_LINK (URL で構成される) で構成されます。これは私が使用したコードです、

    CREATE TABLE USERLOG
    AS
    SELECT C_IP, WEB_LINK FROM weblog_views;

このテーブルに USER_ID と呼ばれる別の列を追加したいと考えています。これは、既存の行ごとに一意の ID を作成するために、1 から 9000 レコードで始まるシーケンスで構成されます。この部分について助けが必要です。Oracle SQL Developer: ODMiner バージョン 3.0.04 を使用しています。AUTO-INCREMENT オプションを使ってみたのですが、

    ALTER TABLE USERLOG
    ADD USER_ID INT UNSIGNED NOT NULL AUTO_INCREMENT;

しかし、これでエラーが発生します。

    Error report:
    SQL Error: ORA-01735: invalid ALTER TABLE option
    01735. 00000 -  "invalid ALTER TABLE option"

だから、私が得ることができるどんな助けにも本当に感謝しています!

4

3 に答える 3

60

列を追加する必要があります

ALTER TABLE userlog
  ADD( user_id number );

シーケンスを作成する

CREATE SEQUENCE user_id_seq
  START WITH 1
  INCREMENT BY 1
  CACHE 20;

テーブルのデータを更新する

UPDATE userlog
   SET user_id = user_id_seq.nextval

主キーになりたいと仮定するとuser_id、主キー制約を追加します

ALTER TABLE userlog
  ADD CONSTRAINT pk_user_id PRIMARY KEY( user_id );

シーケンスを使用して実行時に自動的に追加するuser_id場合INSERT(他のオプションは、ステートメントで具体的に参照user_id_seq.nextvalするINSERTことです。トリガーも必要です。

CREATE OR REPLACE TRIGGER trg_userlog_user_id
  BEFORE INSERT ON userlog
  FOR EACH ROW
BEGIN
  :new.user_id := user_id_seq.nextval;
END;
于 2012-12-09T00:27:12.543 に答える