首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Oracle 11g中创建自动增量?

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

Stack Overflow用户
提问于 2016-04-17 17:56:13
回答 2查看 11.2K关注 0票数 3

我想为Oracle 11g中的主键生成一个7位数的标识符。主键的长度必须为7位数字。

下面是我的代码:

代码语言:javascript
复制
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位)。有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2016-04-17 18:03:59

您必须修改序列,如下所示:

代码语言:javascript
复制
CREATE SEQUENCE sequence_staff
MINVALUE 1000000
START WITH 1000000
INCREMENT BY 1 NOCACHE NOCYCLE;

此外,您必须始终使用sequence_staff.nextval插入新的staff_id列。查看它是如何工作的

代码语言:javascript
复制
select sequence_staff.nextval from dual; --repeated times.

有关序列的更多信息,请单击此处https://docs.oracle.com/cd/B28359_01/server.111/b28310/views002.htm

编辑:

是的,这是可能的。按照您创建的方式创建序列,然后:

代码语言:javascript
复制
select to_char(sequence_staff.nextval,'FM0000000') from dual;

编辑2:

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

编辑3:如果您真的希望在Oracle数据库中以自己的方式获得结果,则必须:

代码语言:javascript
复制
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'); 

票数 1
EN

Stack Overflow用户

发布于 2020-11-18 22:58:11

代码语言:javascript
复制
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;

触发器定义:

代码语言:javascript
复制
            CREATE OR REPLACE TRIGGER staff_bir 
                BEFORE INSERT ON Staff 
                    FOR EACH ROW

                        BEGIN
                            SELECT staff_seq.NEXTVAL
                                INTO   :new.id
                                    FROM   dual;
                                       END;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36675047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档