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