Necesito crear una secuencia y un desencadenador para autoincrementar la clave principal en una tabla, pero no tengo idea de cómo hacerlo.Auto Increment for Oracle
Respuesta
crear 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 utiliza la secuencia de poblar la tecla
primariaSQL> 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 se insertan datos, no es necesario que especifique la columna EMP_ID
; se completará automáticamente con el desencadenante
SQL> insert into staff(staff_name) values ('Justin');
1 row created.
SQL> select * from staff;
EMP_ID STAFF_NAME
---------- --------------------
1 Justin
Lea esto, Hermoso artículo.
cómo secuencia [auto increment in 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 hemos creado anteriormente y nextval
es una función que se utiliza para asignar el next number from emp_sequence to emp_id
columna 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
Gracias, muy limpio, ¿puedo usar la misma secuencia para cualquier tabla que requiera un incremento automático? también qué parte es el disparador? –
Por curiosidad, ¿por qué leer eso dos veces? –
muy bien explicado, gracias –
Prueba esto:
create sequence seq_EmpID start with 1 increment by 1
insert into Emp_Table values(seq_EmpID.nextval,'Ram')
dulce y simple, gracias a ti también –
Muy buena pregunta !! Probablemente secuencia se puede utilizar de esta manera - asimismo, no estoy seguro de si realmente hay una diferencia:
CREATE SEQUENCE emp_id_seq MINVALUE 1 START WITH 1 INCREMENT BY 1 CACHE 10;
Esto es casi idéntico a otra respuesta. –
Si utiliza una secuencia de varias mesas, ya que el valor de la secuencia es ejemplo inconsistentes: tenemos dos tablas emp y depeartement: Si uso la secuencia en emp tendría: ID_dept = 6 porque el 5 ya está usado en la otra tabla.
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>
- 1. Hibernate Auto Increment ID
- 2. ¿Cómo funciona MySQL Auto Increment?
- 3. Hibernate problemas con Auto Increment ID MYSQL 5
- 4. javadoc auto generation for intellij
- 5. ¿CÓMO CARGAR DATOS INFILE en mysql con la primera col siendo Auto Increment?
- 6. does addSubview increment retain count?
- 7. Oracle - Insertar nueva fila con Auto Incremental ID
- 8. Oracle Analytic function for min value in grouping
- 9. ¿Está usando increment (operator ++) en floats bad style?
- 10. Auto Patcher (Efficient Auto Updater)
- 11. DbProviderFactories for .NET Error
- 12. ¿Cómo deserializar los registros de datos serializados con FOR XML AUTO en T-SQL?
- 13. si (auto = [súper init]) vs. if ((auto = [súper init]))
- 14. Hibernate con MySQL: Auto-Generate Id: Equivalente de secuencia (Oracle) en MySQL
- 15. subconsulta Auto-incremento en tsql instrucción de selección
- 16. APP primaria de auto clave generar
- 17. Xcode 4 términos "Build for testing/Build for running/build for profiling/build for archiving"
- 18. ¿Dónde descargo javacomm for linux ahora que Oracle canceló el sitio de descarga de Suns?
- 19. Toad for Oracle - cambio de formato en DBMS Ventana de salida
- 20. Símbolos indefinidos "vtable for ..." and "typeinfo for ..."?
- 21. ¿Hay alguna diferencia entre "margin: 0 auto;" y "margin: auto;"
- 22. de acceso directo para super (tipo (auto), auto)
- 23. ¿Es 'auto const' y 'const auto' lo mismo?
- 24. emacs compile buffer auto close?
- 25. uso de la instrucción FOR UPDATE
- 26. Oracle: configuración de la secuencia a un valor específico
- 27. GridView auto fit images
- 28. Auto Boxing of primitives
- 29. auto create statistics
- 30. Jquery auto refresh div
Hola, ¿se puede usar una secuencia para diferentes tablas? –
@JoseDavidGarciaLlanos - Puedes, sí. Convencionalmente, crearías secuencias separadas para cada tabla. Eso reduce la contienda entre las sesiones que realizan inserciones en diferentes tablas, por ejemplo. –
Gracias por la guía y el código de activación –