?id=816ceff0-93f7-47bf-81e0-1a6271283fcb
Cómo obtener el último autonumérico en distintos sistemas de base de datos
por José M. Alarcón
Cuando definimos un campo (normalmente una clave primaria) de una tabla de base de datos como Autonumérico lo que estamos indicando es que, el propio gestor dedatos, al introducir un nuevo registro en la tabla generará un valor consecutivo para la secuencia, aislándonos del problema que representaría el tener que hacerlo nosotros mismos (transacciones, bloqueos, etc...).
Una vez insertado el registro en la mayor parte de las ocasiones es necesario averiguar qué valor se ha generado. Los SGBD más importantes del mercado ofrecen una forma sencilla de obtener este dato, aislándonos del hecho que desde que lo hayamos generado hasta que lo consultemos (dentro de la misma conexión) éste ya puede haber aumentado (en una inserción paralela de otra conexión).
La forma de obtener esta información es la siguiente:
· SQL Server 2000 o superior:
SELECT SCOPE_IDENTITY()
en SQL 7.0 y anteriores era SELECT IDENTITY() que aún funciona, pero que devuelve el último autonumérico generado en cualquier lugar, no dentro del ámbito actual, por lo que hay que usarlo con más cuidado.
· MySQL:
SELECT LAST_INSERT_ID()
· Oracle:
SELECT Secuencia.CURRVAL FROM DUAL
En Oracle no existen los autonuméricos como tales. Lo que existen son las secuencias que se definen aparte y que, como su propio nombre indica, son secuencias con nombre que se ocupan de generar números consecutivos que luego asignamos a un determinado campo para "simular" un campo autonumérico. En la sentencia anterior hay que especificar, por tanto, el nombre de la secuencia para obtener su último valor.
José Manuel Alarcón Aguín
Fundador de
campusMVP.es, el
proyecto de referencia en formación on-line para programadores en lengua española.
Autor de varios libros y cientos de artículos. Galardonado como
MVP de Microsoft desde 2004. Gallego de Vigo, amante de la ciencia y la
tecnología, la música y la lectura. Ayudando a la gente en Internet desde 1996.