oct
21
2008

[TRUCO] Autoincremental en Postgres

Generalmente para utilizar un campo autoincremental en una base de datos, se asigna el valor 0 (cero) o NULL (nulo) y la base de datos nos asignara el numero máximo siguiente. Pero en ocasiones este numero autoincremental esta basado en un numero (o incluso mas) llave. ¿Como hacer para poder generar este numero de manera autoincremental?…

No se… pero en me dijeron que en Postgres era algo así como:

nextval('tabla_campo_seq'::regclass)

Tomando en cuenta que tabla… si, seria el nombre de la tabla……. y adivinaron, campo, seria el campo autoincremental… pero ojo, eso solo funciona si efectivamente el campo es autoincremental. Pero que ocurre cuando el campo tiene una llave antes: Ejem. Dirección -> Subdireccion. La tabla dirección tiene un Iddireccion autoincremental, pero la relación iddireccion,idsubdireccion es igualmente autoincremental con relación al primero…. pues si hay formas mas sencillas de solucionarlo me las dicen, pero ahí les va una posible solución:

SELECT max(idsubdireccion)::numeric(4,0)+1 FROM Tablasubdireccion WHERE Iddireccion=1 GROUP BY Iddireccion

Esto nos regresara el valor maximo siguiente de Subdireccion de la Dirección 1 (uno). Pero como si no existe aun un valor en idsubdireccion, nos retornara el valor NULL (nulo). ¿como solucionar esto?… pues……… ¿asi?

CASE WHEN (SELECT max(idsubdireccion )::numeric(4,0)+1 FROM Tablasubdireccion WHERE Iddireccion=1 GROUP BY Iddireccion) IS NULL THEN 1
ELSE(SELECT max(idsubdireccion)::numeric(4,0)+1 FROM Tablasubdireccion WHERE Iddireccion=1 GROUP BY Iddireccion) END

Que no es PHP….. pero bueno, a veces me obligan a aprender cosas que no quiero.

Written by Antioroku in: Informatica | Etiquetas: , ,

1 comentario »

RSS feed for comments on this post. TrackBack URL


Leave a Reply

Powered by WordPress | Theme: Aeros 2.0 by TheBuckmaker.com