简体   繁体   English

如何在 Oracle 11g 中创建自动增量?

[英]How do you create an auto increment in Oracle 11g?

I want to generate a 7 DIGIT identifier for primary key in Oracle 11g.我想为 Oracle 11g 中的主键生成一个 7 DIGIT 标识符。 The primary key must be 7 digits long.主键的长度必须为 7 位。

Here is my 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
);

Currently the primary key is 1 (1 digit), not 0000001 (7 digits).当前主键是 1(1 位),而不是 0000001(7 位)。 Any ideas?有什么想法吗?

You have to modify the sequence as follows :您必须按如下方式修改序列:

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

Also, you have to insert the new staff_id column using sequence_staff.nextval always.此外,您必须始终使用sequence_staff.nextval插入新的 staff_id 列。 See how it works hitting看看它是如何工作的

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

Read more about sequences here https://docs.oracle.com/cd/B28359_01/server.111/b28310/views002.htm在此处阅读有关序列的更多信息https://docs.oracle.com/cd/B28359_01/server.111/b28310/views002.htm

EDIT :编辑:

Yes, it is possible.是的,这是可能的。 Create sequence the way you were creating and :按照您创建的方式创建序列,并且:

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

EDIT 2 :编辑 2:

This link deserves the credit.这个链接值得称赞。 http://stackoverflow.com/questions/14561210/creating-a-sequence-for-a-varchar2-field-in-oracle http://stackoverflow.com/questions/14561210/creating-a-sequence-for-a-varchar2-field-in-oracle

EDIT 3 : If you really want the results your way in Oracle Database you have to :编辑 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'); 

结果

CREATE TABLE staff 
    ( 
        id         NUMBER(7) NOT NULL, 
            surname    VARCHAR2(50) NOT NULL, 
                firstnames VARCHAR2(50) NOT NULL, 
                    phone      VARCHAR2(30) NOT NULL, 
                        address    VARCHAR2(150) NOT NULL 
  );



ALTER TABLE Staff ADD (
  CONSTRAINT staff_pk PRIMARY KEY (ID));

    CREATE SEQUENCE staff_seq START WITH 1;

Trigger definition:触发器定义:

            CREATE OR REPLACE TRIGGER staff_bir 
                BEFORE INSERT ON Staff 
                    FOR EACH ROW

                        BEGIN
                            SELECT staff_seq.NEXTVAL
                                INTO   :new.id
                                    FROM   dual;
                                       END;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM