Crear una Secuencia en Oracle

Es típico, a la hora de crear una nueva tabla, el crear un campo id a modo de clave primaria (PK, primary key), cuyo valor será numérico y se irá incrementando según se vaya rellenando la tabla. Para estos casos se suele usar una secuencia.

Este tipo de objeto de Oracle es muy útil para estos casos aunque también se puede utilizar para rellenar cualquier campo, sin ser ninguna clave. Las secuencias, se guardan los parámetros que se le han dado al crearlas, así como el siguiente valor.

Sintaxis para crear secuencia Oracle

La sintaxis para crear una secuencia es la siguiente:

CREATE SEQUENCE sequence_name
  START WITH value
  INCREMENT BY value
  MAXVALUE value
  MINVALUE value
  CACHE value / NOCACHE
  CYCLE
  ORDER;

Donde,

  • START WITH indica el valor inicial de la secuencia.
  • MINVALUE es el valor mínimo que tendrá la secuencia.
  • MAXVALUE es el valor máximo que tendrá la secuencia, si no se especifica, por defecto se le asigna el 999999999999999999999999999.
  • INCREMENT BY es el valor con el que se incrementará cada vez que se requiera un nuevo valor. Lo normal suele ser 1, pero puede darse el caso de querer que el valor se vaya incrementando de 2 en 2 o cualquier cifra que se quiera.
  • CACHE / NOCACHE el uso de CACHE permite indicar cuantos valores se quiere que sean guardados en memoria para una acceso más rápido. El inconveniente que tiene es que en caso de una caída del sistema, los valores generados por la secuencia se pierden y quedarian «huecos». Si se especifica caché, hay que indicar el número de valores que se quiere cachear, en caso contrario no haría falta.
  • CYCLE indica si se quiere que la secuencia sea cíclica (vuelve a empezar desde el valor mínimo una vez alcanza el valor máximo, es decir, se reinicia), o si por el contrario se quiere que no genere más valores una vez llega al valor máximo especificado.
  • ORDER indica que los valores tienen que ir siempre en orden y de manera secuencial tras el último valor.

Para acceder al siguiente valor, se puede obtener mediante la siguiente query, donde seq_name es el nombre de la secuencia que se quiere utilizar:

SELECT seq_name.nextval from dual

Un ejemplo de uso de una secuencia desde Java, podría ser de la siguiente manera:

String sqlIdentifier = "select seq_name.NEXTVAL from dual";
PreparedStatement pst = conn.prepareStatement(sqlIdentifier);
synchronized( this ) {
  ResultSet rs = pst.executeQuery();
  if(rs.next())
    long myId = rs.getLong(1);
}

Siendo ‘seq_name’ el nombre de la secuencia en base de datos.

Para modificar una secuencia, se puede realizar de manera similar a cómo se modifica otros objetos o como una tabla:

Alter sequence [...]

Deja un comentario

Pin It on Pinterest