Oracle SQL Developerで列を自動的に増分するように設定するにはどうすればよいですか?フォームが無効になっているのはなぜですか?
注:画像はData Modelerを示していますが、質問とトップアンサーは既存のデータベースの編集について説明しています。
PKを自動的に増分する場合は、その主キーのID列プロパティを設定する必要があります。
理解を深めるには、下の図を参照してください。
残念ながら、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;
SQL Modelerで自動インクリメントを行うことができます。列のプロパティウィンドウで[一般]をクリックし、[自動インクリメント]のボックスにチェックマークを付けます。その後、自動インクリメントウィンドウが有効になります。
@ tom-studeeは正しかった、データモデラーでそれを行うことが可能です。
テーブルをダブルクリックして、列セクションに移動します。ここで、自動インクリメントする列をダブルクリックします。一般的なセクションには、チェックボックス「autoincrement」があります。チェックを入れるだけです。
その後、「autoincrement」セクションに移動してカスタマイズすることもできます。
保存してデータモデラーにSQLスクリプトを生成するように依頼すると、自動インクリメントを表すシーケンスとトリガーが表示されます。
[〜#〜] update [〜#〜]:Oracle 12c以降では、自動インクリメントフィールドを作成するオプションがあります。これは、トリガーやシーケンスよりも優れています。 。
下の画像を参照してください
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列ではありません」のようなエラーが発生した場合「新しい列を作成し、古い列を削除する必要があります。
Oracle SQL Developerを使用する方法:左ペインの接続の下にある「シーケンス」を右クリックし、コンテキスト依存ポップアップから新しいシーケンスの作成を選択します。スキーマ名、sequence_name、プロパティ(値で始まる、最小値、最大値、増分値など)の詳細を入力し、[OK]をクリックします。このauto_incrementを使用するキーを持つテーブルがあり、このテーブルに挿入するときに、このプロパティを使用するフィールドに「your_sequence_name.nextval」を指定するだけです。これが役立つはずです! :)
Oracleには自動インクリメント列がありません。シーケンスとトリガーが必要です。これを行う方法を説明するランダムなブログ投稿があります: http://www.lifeaftercoffee.com/2006/02/17/how-to-create-auto-increment-columns-in-Oracle/ =
私はこの記事を見つけましたが、少し古いように見えますが、新しい発見についてみんなに更新すると思いました。
WindowsでOracle SQL Developer 4.0.2.15を使用しています。データベースは、Windows上で実行されるOracle 10g(バージョン10.2.0.1)です。
Oracleで列を自動インクリメントするには-
Id列(主キー)は自動インクリメントされますが、シーケンスは1から始まります。idを特定のポイントまでインクリメントする必要がある場合は、シーケンスに対していくつかのalterステートメントを実行する必要があります。
この投稿 には、詳細とこれを克服する方法があります。
私は解決策を見つけました ここ