Campo autoincremental en Oracle

Oracle

Es bastante común a la hora de crear las tablas de una base de datos, echar mano de  campos de tipo autoincremental para definir la clave primaria, puesto que resulta una manera rápida y cómoda de evitar errores de inserción por claves duplicadas. En Mysql, esto se resuelve con el atributo AUTO_INCREMENT y SQL Server por su parte utiliza IDENTITY… Sin embargo, a la hora de realizar esta tarea en Oracle, nos encontramos que no existe un atributo para definir este tipo de campos y es por ello que tendremos que realizar una serie de pasos extra para suplir esta ‘carencia’.

La mejor manera de ver esto es con un ejemplo, así que vamos crear una tabla llamada fabricantes con los siguientes campos:

  • cod_fabricante que sera clave primaria y autoincremental
  • nombre que no admite valores nulos
  • pais definiendo ‘España’ como valor por defecto

Creamos la tabla:

CREATE TABLE Fabricantes
(cod_fabricante number primary key,
nombre VARCHAR2(25) NOT NULL,
pais VARCHAR2(25) DEFAULT ‘España’);

Una vez tenemos la tabla, creamos una secuencia. En el ejemplo tan solo le estoy indicando que comience en el 1 y se vaya incrementando en 1 cada vez:

CREATE SEQUENCE cfab
START WITH 1
INCREMENT BY 1;

En principio con esto ya estaría, y ahora a la hora de insertar una fila, bastaría con indicar en el campo correspondiente al código de fabricante «cfab.nextval» (nombre_secuencia.nextval) con lo que automáticamente introducirá el valor que corresponda de la secuencia que hemos creado.

Un ejemplo de inserción seria:

INSERT INTO Fabricantes (cod_fabricante, nombre, pais)
VALUES (cfab.nextval, ‘Nintendo’, ‘Japon’);

Sin embargo, una forma más elegante de hacerlo sería crear un trigger que se encargue de obtener e insertar el valor de la secuencia automáticamente:

CREATE TRIGGER TRIG_FAB
BEFORE INSERT ON Fabricantes
FOR EACH ROW
BEGIN
SELECT cfab.NEXTVAL INTO :NEW.cod_fabricante FROM DUAL;
END;

Ahora con solo indicar el nombre y el pais, el trigger que hemos creado introducirá automáticamente el campo correspondiente al código del fabricante que obtendrá a partir de la secuencia que hemos creado.

INSERT INTO Fabricantes (nombre, pais)
VALUES (‘Nintendo’, ‘Japon’);

 

18 Respuestas to “Campo autoincremental en Oracle”


  1. 2 isaac 10/07/2013 a las 15:35

    pero como puedo hacer para que no siga contando cuando borre un registro

  2. 3 isaac 10/07/2013 a las 15:35

    y cuando crea uno nuevo siga el conteo en donde se quedo

  3. 4 christian miranda 10/18/2013 a las 5:24

    excelente contenido ni a los ingenieros que me dan clases le entendí como a vos. Agradezco a DIOS por personas como vos!!’ des de guate saludos

  4. 5 Anonimo 05/06/2014 a las 21:50

    Tengo una duda, utilizo campos autoincrementables para las tablas de países, estados, ciudades y colonias, pero no respeta las llaves primarias. Por ejemplo, lo correcto sería:
    id_pais id_estado id_ciudad id_colonia
    1 1 1 1
    1 1 1 2
    1 2 1 1

    Pero en mi caso todos los id’s se incrementan de manera que no respeta las llaves foraneas:
    id_pais id_estado id_ciudad id_colonia
    1 1 1 1
    1 1 2 2
    1 2 2 3

    Me podrían ayudar?

  5. 7 Vero 10/12/2014 a las 21:54

    Me podrias explicar esta linea por favor 🙂
    SELECT cfab.NEXTVAL INTO :NEW.cod_fabricante FROM DUAL;

  6. 10 jhon 08/25/2015 a las 1:57

    GRACIAS POR EL APORTE

  7. 11 Anónimo 03/15/2016 a las 16:12

    excelente

  8. 12 mario 12/14/2016 a las 23:22

    hola tengo una duda, como le hago para obtener el valor de la secuencia dentro de ese trigger al momento de insertar un registro

  9. 14 Nelson Ferrucho 02/26/2021 a las 17:44

    mago, gracias

  10. 15 Sebastian 06/07/2021 a las 23:06

    Muchas gracias por la simple explicación a tan grande problema. Crack

  11. 16 Italex 05/04/2023 a las 16:45

    Excelente muchas gracias, tengo unas consultas, una secuencia se puede entonces atar a varios campos si quisiera? (que no estaria «bien»), por lo tanto, tampoco seria posible saber si una secuencia pertenece a que campo?


  1. 1 Campo autoincremental en Oracle « DbRunas – Noticias y Recursos sobre Bases de Datos Trackback en 08/06/2012 a las 22:27
  2. 2 helen Trackback en 12/15/2020 a las 14:26

Replica a Salvador Cancelar la respuesta




TELDAT CTI
VCA-DCV
JNCIA
CCNA

Introduce tu correo electrónico y recibe todas las actualizaciones

Únete a otros 160 suscriptores
agosto 2012
L M X J V S D
 12345
6789101112
13141516171819
20212223242526
2728293031  

Blog Stats

  • 703.713 Visitas
Creative Commons