mega - Auto Incremento para Oracle
oracle sql developer (5)
Necesito crear una secuencia y un desencadenante para incrementar automáticamente la clave principal en una tabla, pero no tengo idea de cómo hacerlo.
Crea la tabla y la secuencia.
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.
Ahora, puede crear un disparador que use la secuencia para completar la clave principal
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.
Ahora, cuando inserte datos, no tendrá que especificar la EMP_ID
EMP_ID EMP_ID
desencadenante lo rellenará automáticamente.
SQL> insert into staff( staff_name ) values (''Justin'');
1 row created.
SQL> select * from staff;
EMP_ID STAFF_NAME
---------- --------------------
1 Justin
Lee esto, hermoso artículo.
como secuencia [auto incremento en oracle]
sintaxis
Create sequence sequence_name
start with value
increment by value
minvalue value
maxvalue value;
ejemplo
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'');
en emp_sequence.nextval
donde emp_sequence
es el nombre de la secuencia que creamos anteriormente y nextval
es una función que se usa para asignar el next number from emp_sequence to emp_id
column en la tabla emp.
SQL> select * from emp;
EMP_ID FNAME LNAME
---------- ------------------------- -------------------------
1 Darvin Johnson
2 Mig Andrews
3 Alex Martin
4 Jon paul
5 Yatin Bones
Muy buena pregunta !! Probablemente la secuencia se puede usar de esta manera, además, no estoy seguro de si realmente hay una diferencia:
CREATE SEQUENCE emp_id_seq MINVALUE 1 START WITH 1 INCREMENT BY 1 CACHE 10;
Prueba esto:
create sequence seq_EmpID start with 1 increment by 1
insert into Emp_Table values(seq_EmpID.nextval,''Ram'')
Si usa una secuencia para varias tablas, porque el valor de la secuencia es un ejemplo incoherente: tenemos dos tablas emp y abatimiento: si uso la secuencia en emp tendría: ID_dept = 6 porque el 5 ya se usa en el otro mesa.
ejemplo:
SQL> insert into emp values(masequence.nextval,''aaa'');
1 ligne crÚÚe.
SQL> insert into departement values(masequence.nextval,''aaa'');
1 ligne crÚÚe.
SQL> select * from emp;
ID_EMP NOM_EMP
---------- -------------------------
5 aaa
SQL> select * from departement;
ID_DEPT NOM_DEPT
---------- ----------
6 aaa
SQL>