web-dev-qa-db-ja.com

SQL Developerで自動インクリメント列を設定する方法

Oracle SQL Developerで列を自動的に増分するように設定するにはどうすればよいですか?フォームが無効になっているのはなぜですか?

Oracle SQL Developer

注:画像はData Modelerを示していますが、質問とトップアンサーは既存のデータベースの編集について説明しています。

38

PKを自動的に増分する場合は、その主キーのID列プロパティを設定する必要があります。

  1. テーブルを右クリックして、「編集」を選択します。
  2. [テーブルの編集]ウィンドウで[列]を選択し、PK列を選択します。
  3. [ID列]タブに移動し、[タイプ]として[列の順序]を選択します。これにより、トリガーとシーケンスが作成され、シーケンスが主キーに関連付けられます。

理解を深めるには、下の図を参照してください。

enter image description here

//私のソースは: http://techatplay.wordpress.com/2013/11/22/Oracle-sql-developer-create-auto-incrementing-primary-key/

79
Daniel Perník

残念ながら、Oracleはmysqlのようにauto_incrementをサポートしていません。それを得るには少し余分な努力をする必要があります。

これがあなたのテーブルだと言う-

CREATE TABLE MYTABLE (
  ID NUMBER NOT NULL,
  NAME VARCHAR2(100)
  CONSTRAINT "PK1" PRIMARY KEY (ID)
);

シーケンスを作成する必要があります-

CREATE SEQUENCE S_MYTABLE
START WITH 1
INCREMENT BY 1
CACHE 10;

とトリガー-

CREATE OR REPLACE TRIGGER T_MYTABLE_ID
BEFORE INSERT
ON MYTABLE
REFERENCING NEW AS NEW
FOR EACH ROW
BEGIN
  if(:new.ID is null) then
  SELECT S_MYTABLE.nextval
  INTO :new.ID
  FROM dual;
  end if;
END;
/

ALTER TRIGGER "T_MYTABLE_ID" ENABLE;
26
Kshitij

SQL Modelerで自動インクリメントを行うことができます。列のプロパティウィンドウで[一般]をクリックし、[自動インクリメント]のボックスにチェックマークを付けます。その後、自動インクリメントウィンドウが有効になります。

6
user1116119

@ tom-studeeは正しかった、データモデラーでそれを行うことが可能です。

テーブルをダブルクリックして、列セクションに移動します。ここで、自動インクリメントする列をダブルクリックします。一般的なセクションには、チェックボックス「autoincrement」があります。チェックを入れるだけです。

その後、「autoincrement」セクションに移動してカスタマイズすることもできます。

保存してデータモデラーにSQLスクリプトを生成するように依頼すると、自動インクリメントを表すシーケンスとトリガーが表示されます。

3
Bartheleway

[〜#〜] update [〜#〜]:Oracle 12c以降では、自動インクリメントフィールドを作成するオプションがあります。これは、トリガーやシーケンスよりも優れています。 。

  • テーブルを右クリックして、「編集」を選択します。
  • [テーブルの編集]ウィンドウで[列]を選択し、PK列を選択します。
  • 「ID列」タブに移動し、「IDとして生成」をタイプとして選択し、開始フィールドと増分フィールドの両方に1を入力します。これにより、この列は自動的に増加します。

下の画像を参照してください

enter image description here

SQLステートメントから

IDENTITY列がOracle 12cで利用可能になりました。

 create table t1 (
     c1 NUMBER GENERATED by default on null as IDENTITY,
     c2 VARCHAR2(10)
     );

または、開始値と増分値を指定し、ID列への挿入も防止します(GENERATED ALWAYS)(再度、Oracle 12c +のみ)

create table t1 (
    c1 NUMBER GENERATED ALWAYS as IDENTITY(START with 1 INCREMENT by 1),
    c2 VARCHAR2(10)
    );

[〜#〜] edit [〜#〜]:「ORA-30673:変更する列はID列ではありません」のようなエラーが発生した場合「新しい列を作成し、古い列を削除する必要があります。

2
Suneel Kumar

Oracle SQL Developerを使用する方法:左ペインの接続の下にある「シーケンス」を右クリックし、コンテキスト依存ポップアップから新しいシーケンスの作成を選択します。スキーマ名、sequence_name、プロパティ(値で始まる、最小値、最大値、増分値など)の詳細を入力し、[OK]をクリックします。このauto_incrementを使用するキーを持つテーブルがあり、このテーブルに挿入するときに、このプロパティを使用するフィールドに「your_sequence_name.nextval」を指定するだけです。これが役立つはずです! :)

1
Seeder

Oracleには自動インクリメント列がありません。シーケンスとトリガーが必要です。これを行う方法を説明するランダムなブログ投稿があります: http://www.lifeaftercoffee.com/2006/02/17/how-to-create-auto-increment-columns-in-Oracle/ =

1
eaolson

私はこの記事を見つけましたが、少し古いように見えますが、新しい発見についてみんなに更新すると思いました。

WindowsでOracle SQL Developer 4.0.2.15を使用しています。データベースは、Windows上で実行されるOracle 10g(バージョン10.2.0.1)です。

Oracleで列を自動インクリメントするには-

  1. [接続]タブでデータベース接続を開きます
  2. [テーブル]セクションを展開し、自動インクリメントに変更する列があるテーブルを右クリックして、[編集...]を選択します。
  3. [列]セクションを選択し、自動インクリメントする列(主キー列)を選択します
  4. 次に、列のリストの下にある「ID列」セクションをクリックし、タイプを「なし」から「列シーケンス」に変更します。
  5. デフォルト設定のままにして(または、必要に応じてシーケンス名とトリガー名を変更して)、[OK]をクリックします

Id列(主キー)は自動インクリメントされますが、シーケンスは1から始まります。idを特定のポイントまでインクリメントする必要がある場合は、シーケンスに対していくつかのalterステートメントを実行する必要があります。
この投稿 には、詳細とこれを克服する方法があります。

私は解決策を見つけました ここ

1
chopsuei3