[英]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','Gotham');
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.