45

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

Oracle SQL Developer

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

4

8 に答える 8

94

PKを自動インクリメントする場合は、その主キーのID列プロパティを設定する必要があります。

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

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

ここに画像の説明を入力してください

//私のソースは次のとおりです:http://techatplay.wordpress.com/2013/11/22/oracle-sql-developer-create-auto-incrementing-primary-key/

于 2014-12-11T22:31:47.073 に答える
28

残念ながら、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;
于 2012-06-12T04:19:47.503 に答える
6

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

于 2013-03-11T15:33:39.137 に答える
3

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

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

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

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

于 2015-05-07T06:37:32.997 に答える
3

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

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

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

ここに画像の説明を入力してください

SQLステートメントから

IDENTITY列がOracle12cで使用できるようになりました。

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

または、開始値と増分値を指定して、ID列への挿入を防止します(常に生成)(ここでも、Oracle 12c +のみ)

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

編集:「ORA-30673:変更する列がID列ではありません」などのエラーが発生した場合は、新しい列を作成して古い列を削除する必要があります。

于 2018-08-30T06:24:09.940 に答える
2

少し古く見えるこの投稿を見つけましたが、新しい発見についてみんなに更新すると思いました。

WindowsでOracleSQLDeveloper4.0.2.15を使用しています。私たちのデータベースは、Windows上で実行されているOracle 10g(バージョン10.2.0.1)です。

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

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

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

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

于 2014-11-07T15:58:58.363 に答える
1

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

于 2012-06-12T04:09:30.433 に答える
1

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

于 2012-08-16T09:51:14.060 に答える