En Oracle no existe el atributo AUTO_INCREMENT de MySQL que permite asignar automáticamente un valor incremental al momento de insertar registros, en cambio hay que utilizar un objeto llamado SEQUENCE.
La sintáxis básica de creación es la siguiente:
CREATE SEQUENCE sequence_name
MINVALUE value
MAXVALUE value
START WITH value
INCREMENT BY value
CACHE value;
Hace poco tuve el requerimiento de crear una secuencia que comenzara a numerar desde un valor calculado a partir de un SELECT, en este caso tuve que utilizar SQL dinámico mediante la instrucción EXECUTE IMMEDIATE, por ejemplo:
DECLARE maxId NUMBER(19,0);
BEGIN
EXECUTE IMMEDIATE 'SELECT MAX(id) FROM Logs' INTO maxId;
EXECUTE IMMEDIATE 'CREATE SEQUENCE SEQ_NUM_LOG START WITH '||maxId;
COMMIT;
END;
El código anterior crea una secuencia llamada SEQ_NUM_LOG que comenzará a numerar con el máximo valor de la columna id de la tabla Logs.
Es interesante recordar el uso de la instrucción EXECUTE IMMEDIATE para los casos en que necesitamos ejecutar una sentencia DML armada dinámicamente.
Hasta el próximo post!!
jueves, 1 de julio de 2010
Sequence Oracle con START WITH dinámico
Suscribirse a:
Enviar comentarios (Atom)
7 comentarios:
Muy útil la publicacion! Muy recomendable!
Oracle es increíble. El mejor motor de DB de por lejos! Gracias.
Muy buen blog el tuyo! =)
Oracle lo peta
Muy util!!
Nunca utilizaría este tipo de técnica, tampoco el AUTOINCREMENT. La razón muy sencilla: si se eliminan registros se crean huecos en las numeraciones por ejemplo. Es más seguro leer el último registro y sumarle 1.
Publicar un comentario