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’);

 

Anuncios

14 Responses to “Campo autoincremental en Oracle”


  1. 2 isaac 10/07/2013 en 15:35

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

  2. 3 isaac 10/07/2013 en 15:35

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

  3. 4 christian miranda 10/18/2013 en 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 en 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 en 21:54

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

  6. 10 jhon 08/25/2015 en 1:57

    GRACIAS POR EL APORTE

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

    excelente

  8. 12 mario 12/14/2016 en 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


  1. 1 Campo autoincremental en Oracle « DbRunas – Noticias y Recursos sobre Bases de Datos Trackback en 08/06/2012 en 22:27

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s




TELDAT CTI
VCA-DCV
JNCIA
CCNA

Introduce tu correo electrónico y recibe todas las actualizaciones

Únete a otros 146 seguidores

agosto 2012
L M X J V S D
« Jul   Sep »
 12345
6789101112
13141516171819
20212223242526
2728293031  

Actualizaciones de Twitter

Blog Stats

  • 422,701 Visitas
Creative Commons

A %d blogueros les gusta esto: