我需要创建一个序列和一个触发器来自动递增表上的主键,但我不知道如何去做。自动增量为Oracle
回答
创建表和序列
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.
现在,你可以创建一个使用该序列来填充主键
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
阅读,美丽的文章。
如何序列[auto increment in 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.nextval
其中emp_sequence
是我们在上面和nextval
创建序列的名称是用于分配的功能next number from emp_sequence to emp_id
emp表中的列。
SQL> select * from emp;
EMP_ID FNAME LNAME
---------- ------------------------- -------------------------
1 Darvin Johnson
2 Mig Andrews
3 Alex Martin
4 Jon paul
5 Yatin Bones
感谢,非常整洁,我可以使用相同的序列的任何表需要自动增量?还有哪部分是触发器? – 2012-03-16 07:00:46
出于好奇,为什么要读那两次? – 2012-03-16 07:23:00
很好解释,谢谢 – 2012-03-16 07:32:13
试试这个:
create sequence seq_EmpID start with 1 increment by 1
insert into Emp_Table values(seq_EmpID.nextval,'Ram')
甜美简单,多亏你也 – 2012-03-16 07:33:21
非常好的问题! 大概序列可以以这种方式使用的 - 也是,我不知道是否真的有一个区别:
CREATE SEQUENCE emp_id_seq MINVALUE 1 START WITH 1 INCREMENT BY 1 CACHE 10;
这与其他答案几乎完全相同。 – 2014-03-12 03:11:36
如果使用序列数表,因为序列的价值是不一致的例子: 我们有两个表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>
- 1. Oracle:自定义自动增量:C0001 C0002
- 2. Oracle实体框架自动增量?
- 3. Subsonic Oracle自动增量问题
- 4. oracle自动增量缺少右括号
- 5. Oracle:自动增量触发器。
- 6. 在Oracle包中自动增量
- 7. Oracle自动增量触发器问题
- 8. 自动增量组合密钥Oracle
- 9. Oracle复合键自动递增(减量!?)
- 10. 在oracle中自动增量APEX
- 11. 将自动增量列修改为全局自动增量列
- 12. 在oracle 10g中添加自动增量和自动递减列
- 13. oracle - 如何使用序列作为自动增量ID?
- 14. ORACLE自动递增JPA
- 15. SQL自动增量
- 16. Sqlite自动增量
- 17. Java自动增量
- 18. ClearDB自动增量
- 19. Id自动增量varchar不增量
- 20. 重量自动增量
- 21. 如何使自动增量列非自动增量?
- 22. 主键自动增量为-1,-2,-3
- 23. 将自动增量设置为android
- 24. oracle上的自动增量(需要添加此语句?)
- 25. 在Grails&Oracle中创建一个自动增量(non id)字段
- 26. 在休眠状态下使用oracle自动增量触发
- 27. 如何在oracle 11g中插入id自动增量?
- 28. Oracle DB - 没有序列的主键自动增量列
- 29. oracle中使用休眠的自动增量列
- 30. Oracle 9i自动增量触发器/序列不起作用
嗨,真棒可以序列用于不同的表? – 2012-03-16 07:09:42
@JoseDavidGarciaLlanos - 你可以,是的。通常,您可以为每个表创建单独的序列。例如,这可以减少在不同表上插入的会话之间的争用。 – 2012-03-16 07:13:22
感谢您的指导和触发代码 – 2012-03-16 07:31:55