Oracle自动递增

我需要创build一个序列和触发器来自动递增表上的主键,但我不知道如何做到这一点。

创build表格和序列

SQL> create table staff ( 2 emp_id number primary key, 3 staff_name varchar2(100) 4 ); Table created. SQL> create sequence emp_id_seq; Sequence created. 

现在,您可以创build一个使用序列填充主键的触发器

 SQL> create trigger trg_emp_id 2 before insert on staff 3 for each row 4 begin 5 select emp_id_seq.nextval 6 into :new.emp_id 7 from dual; 8 end; 9 / Trigger created. 

现在,当你插入数据时,你不需要指定EMP_ID列 – 它会自动填充触发器

 SQL> insert into staff( staff_name ) values ('Justin'); 1 row created. SQL> select * from staff; EMP_ID STAFF_NAME ---------- -------------------- 1 Justin 

阅读此文,美丽的文章。

如何顺序[在oracle中自动增量]

句法

 Create sequence sequence_name start with value increment by value minvalue value maxvalue value; 

 SQL> create table emp ( emp_id number(10), fname varchar2(25), lname varchar2(25), constraint pk_emp_id PRIMARY KEY(emp_id) ); SQL> Create sequence emp_sequence start with 1 increment by 1 minvalue 1 maxvalue 10000; SQL> insert into emp (emp_id,fname,lname) values(emp_sequence.nextval,'Darvin','Johnson'); SQL> insert into emp (emp_id,fname,lname) values(emp_sequence.nextval,'Mig','Andrews'); SQL> insert into emp (emp_id,fname,lname) values(emp_sequence.nextval,'Alex','Martin'); SQL> insert into emp (emp_id,fname,lname) values(emp_sequence.nextval,'Jon','paul'); SQL> insert into emp (emp_id,fname,lname) values(emp_sequence.nextval,'Yatin','Bones'); 

emp_sequence.nextvalemp_sequence是我们上面创build的序列的名称, nextval是一个函数,用于将next number from emp_sequence to emp_idnext number from emp_sequence to emp_id emp表中的next number from emp_sequence to emp_id列。

 SQL> select * from emp; EMP_ID FNAME LNAME ---------- ------------------------- ------------------------- 1 Darvin Johnson 2 Mig Andrews 3 Alex Martin 4 Jon paul 5 Yatin Bones 

尝试这个:

 create sequence seq_EmpID start with 1 increment by 1 

  insert into Emp_Table values(seq_EmpID.nextval,'Ram') 

非常好的问题! 可能序列可能以这种方式使用 – 另外,我不确定是否真的有区别:

 CREATE SEQUENCE emp_id_seq MINVALUE 1 START WITH 1 INCREMENT BY 1 CACHE 10; 

如果你使用多个表的序列,因为序列的值是不一致的例子:我们有两个表emp和depeartement:如果我使用emp的序列,我会有:ID_dept = 6,因为5已经在另一个表。

例如:

 SQL> insert into emp values(masequence.nextval,'aaa'); 

1 lignecrÚÚe。

 SQL> insert into departement values(masequence.nextval,'aaa'); 

1 lignecrÚÚe。

 SQL> select * from emp; ID_EMP NOM_EMP ---------- ------------------------- 5 aaa SQL> select * from departement; ID_DEPT NOM_DEPT ---------- ---------- 6 aaa SQL>