有没有办法在oracle中自动增加id?
UPDATE:它正在工作,但序列从2开始而不是1.我已经将序列开始设置为1
如果有可能不使用序列,但仍然会自动增加id?
下面:
CREATE TABLE tblname
(
fieldname_id number(25),
contract_number number(12) not null,
CONSTRAINT letter_status_pk PRIMARY KEY (fieldname_id, contract_number)
);
序列w /触发器:
create sequence fieldname_id_sequence start with 1
increment by 1
minvalue 1;
create trigger tr_tblname
before insert on tblname
for each row
begin
select fieldname_id_sequence.nextval into :NEW.fieldname_id from dual;
end;
插入数据:
insert all
into tblname(contract_number,fieldname1,fieldname2,fieldname3,fieldname4,fieldname5,fieldname6,fieldname7,fieldname8,fieldname8,fieldname10,fieldname11) values(3300026224,'values','values','values','3/12/2014','values','values','3/18/2014','3/7/2014','values','values')
into tblname(contract_number,fieldname1,fieldname2,fieldname3,fieldname4,fieldname5,fieldname6,fieldname7,fieldname8,fieldname8,fieldname10,fieldname11) values (3300016335,'values','values','values','3/12/2014','values','values','3/18/2014','3/7/2014','values','values')
select 1 from dual;
答案 0 :(得分:1)
您可以使用序列和触发器轻松建模:
Create sequence sequence_name start with value increment by value minvalue value maxvalue value;
首先,让我们在emp_id列上创建一个带有主键约束的emp表。
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;
现在我们创建了一个名为emp_sequence的序列对象,起始值为1,从1(minvalue)到10000(maxvalue)递增1
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是一个函数,用于将emp_sequence中的下一个数字分配给emp表中的emp_id列。
答案 1 :(得分:1)
Oracle 12c 介绍IDENTITY COLUMNS
。
SQL> CREATE TABLE new_identity_table
2 (
3 ID NUMBER GENERATED ALWAYS AS IDENTITY,
4 text VARCHAR2(50)
5 );
Table created.
SQL>
SQL> INSERT
2 INTO new_identity_table
3 (
4 text
5 )
6 VALUES
7 (
8 'This table has an identity column'
9 );
1 row created.
SQL> column text format A40;
SQL>
SQL> select * from new_identity_table;
ID TEXT
---------- ----------------------------------------
1 This table has an identity column
SQL>
Oracle创建sequence
来填充identity column
。您可以找到它命名为ISEQ$$
SQL> select sequence_name, min_value, max_value, increment_by from user_sequences;
SEQUENCE_NAME MIN_VALUE MAX_VALUE INCREMENT_BY
-------------------- ---------- ---------------------------- ------------
ISEQ$$_93199 1 9999999999999999999999999999 1
SQL>
有关标识列的更多信息,请使用ALL_TAB_IDENTITY_COLS
视图。
SQL> SELECT table_name,
2 column_name,
3 generation_type,
4 identity_options
5 FROM all_tab_identity_cols
6 WHERE owner = 'LALIT'
7 ORDER BY 1, 2;
TABLE_NAME COLUMN_NAME GENERATION IDENTITY_OPTIONS
-------------------- --------------- ---------- --------------------------------------------------
NEW_IDENTITY_TABLE ID ALWAYS START WITH: 1, INCREMENT BY: 1, MAX_VALUE: 9999999
999999999999999999999, MIN_VALUE: 1, CYCLE_FLAG: N
, CACHE_SIZE: 20, ORDER_FLAG: N
SQL>