2016-04-17 8 views
2

Ich möchte eine 7-DIGIT-Kennung für Primärschlüssel in Oracle 11g generieren. Der Primärschlüssel muss 7 Ziffern lang sein.Wie erstellen Sie eine automatische Erhöhung in Oracle 11g?

Hier ist mein Code:

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 
); 

Derzeit der Primärschlüssel ist 1 (1 Stelle), nicht 0000001 (7 Stellen). Irgendwelche Ideen?

+2

beginnen mit 1000000! –

+0

ist es möglich, einen Primärschlüssel wie folgt zu haben: 0000001? –

+3

Mögliches Duplikat von [Erstellen einer Sequenz für ein varchar2-Feld in Oracle] (http://stackoverflow.com/questions/14561210/creating-a-sequence-for-a-varchar2-field-in-oracle) –

Antwort

1

Sie haben die Reihenfolge wie folgt zu ändern:

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

Auch Sie haben die neue staff_id Spalte sequence_staff.nextval immer einzufügen. Sehen Sie, wie es funktioniert

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

schlagen Lesen Sie mehr über hier Sequenzen https://docs.oracle.com/cd/B28359_01/server.111/b28310/views002.htm

EDIT:

Ja, es ist möglich. Erstellen Sequenz, die die Art und Weise Sie kreierten und:

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

EDIT 2:

Dieser Link verdient den Kredit. http://stackoverflow.com/questions/14561210/creating-a-sequence-for-a-varchar2-field-in-oracle

EDIT 3: Wenn Sie wirklich die Ergebnisse Ihren Weg in Oracle-Datenbank Sie müssen:

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

Danke aber ist es möglich mit einem zu beginnen und immer noch 7 Ziffern zu haben? wie 0000001 –

+0

Aber ich möchte es in der Datenbank in 7-stelliger Form, nicht in Abfrage speichern. Wie passe ich das in den Einsatz? –

+0

Immer wenn Sie in die Datenbank einfügen, sollten Sie verwenden: Einfügen in Mitarbeiter (Staff_id, Nachname, Vorname, Telefon, Adresse) Werte (to_char (sequence_staff.nextval, 'FM0000000'), 'Wayne', 'Bruce', '0000 ',' Gotham '); –