2016-04-17 12 views
2

Oracle 11gで主キーの7 DIGIT識別子を生成したいとします。主キーは7桁でなければなりません。Oracle 11gで自動インクリメントを作成するにはどうすればよいですか?

CREATE SEQUENCE sequence_staff 
MINVALUE 1 
START WITH 1 
INCREMENT BY 1; 

CREATE TABLE Staff (
    Staff_ID INT PRIMARY KEY, --Autoincrement 7 digit --PK 
    Surname  VARCHAR2(50) NOT NULL, 
    Firstnames VARCHAR2(50) NOT NULL, 
    Phone  VARCHAR2(30) NOT NULL, --D1 
    Address  VARCHAR2(150) NOT NULL 
); 

は現在、主キーは1(1桁)である、ない0000001(7桁):

は、ここに私のコードです。何か案は?あなたは次のように順序を変更する必要が

+2

1000000でスタート! –

+0

このような主キーを持つことは可能ですか?0000001? –

+3

[Oracleでのvarchar2フィールドのシーケンスの作成]の可能な複製(http://stackoverflow.com/questions/14561210/creating-a-sequence-for-a-varchar2-field-in-oracle) –

答えて

1

CREATE SEQUENCE sequence_staff 
MINVALUE 1000000 
START WITH 1000000 
INCREMENT BY 1 NOCACHE NOCYCLE; 

はまた、あなたは常にsequence_staff.nextvalを使用して、新しいstaff_id列を挿入する必要があります。それは

select sequence_staff.nextval from dual; --repeated times. 

を打つどのように機能するかをここでシーケンスについてお読みくださいhttps://docs.oracle.com/cd/B28359_01/server.111/b28310/views002.htm

EDIT:

はい、それは可能です。シーケンスあなたが作成された道を作成して:

select to_char(sequence_staff.nextval,'FM0000000') from dual; 

EDIT 2:

このリンクは、信用に値します。 http://stackoverflow.com/questions/14561210/creating-a-sequence-for-a-varchar2-field-in-oracle

EDIT 3:あなたは本当に結果をしたい場合は、あなたの方法あなたが持っているOracleデータベース内に:

1. alter table staff modify staff_id varchar(20); 
2. CREATE SEQUENCE sequence_staff 
MINVALUE 1 
START WITH 1 
INCREMENT BY 1 NOCACHE NOCYCLE; 
3. insert into staff(Staff_id, surname,firstnames, phone,address) values(to_char(sequence_staff.nextval,'FM0000000'),'Wayne','Bruce','0000','Gotha‌​m'); 

Result

+0

ありがとうございますが、1桁から始まって7桁の数字を入力することは可能ですか? like 0000001 –

+0

しかし、私は7桁の形式でデータベースに格納したいのですが、クエリには入れません。どのようにそれを挿入に適合させるのですか? –

+0

データベースに挿入するときは、以下を使用する必要があります。値(to_char(sequence_staff.nextval、 'FM0000000')、 'Wayne'、 'Bruce'、 '0000 '、'ゴッサム '); –