XyVy Master


Registrado: 25 Ago 2002Mensajes: 557Ubicación: Murcia (España)
|
Publicado: Dom 30 Nov, 2003 11:41 pm Asunto: |
|
|
Bueno vamos a ver si te puedo ayudar.
Para tener un campo con auto-incremento en Interbase, debes utilizar los llamados generadores para ello tienes dos sentencias SQL fundamentales.
1º CREATE GENERATOR
2º SET GENERATOR
La primera como es obvio será para crearlo y la segunda para inicializarlo la primera vez.
Por ejemplo supongamos que queremos tener la siguiente tabla
| Código: |
CREATE TABLE articulos (
articulo_id INTEGER NOT NULL,
descripcion VARCHAR(25),
..... (más campos)
)
|
Luego definimos cual será la clave primaria de la tabla:
| Código: |
ALTER TABLE articulos ADD CONSTRAINT articulos_PK PRIMARY KEY (articulo_id);
|
Con eso definimos la clave primaria y le asociamos un nombre a la restricción de integridad.
Pasemos ahora a crear el generador que luego asociaremos al campo concreto con un trigger.
Primero creamos el generador y lo inicializamos a 0:
| Código: |
CREATE GENERATOR articulo_id_gen;
SET GENERATOR articulo_id_gen TO 0;
|
Lo inicializamos a 0, porque la primera vez que se llame pues se incrementará en 1 y el generador por lo tanto devolverá un 1.
Ya solo nos queda crear el trigger que llamara a incrementar el campo antes de insertar cualquier nuevo registro. El trigger lo definiremos así:
| Código: |
SET TERM !! ;
CREATE TRIGGER crear_articulo_id FOR articulos
BEFORE INSERT
POSITION 0
AS BEGIN
NEW.articulo_id=GEN_ID(articulo_id_gen, 1);
END !!
SET TERM ; !!
|
Bueno una vez hecho esto, simplemente lo unico te queda es llenar la tabla de datos, en cada insercción (si te fijas en el trigger, al ser BEFORE INSERT, se llama al generador para que lo incremente en una unidad y le asigne el número devuelto por el generador al campo articulo. Esto no tiene mucho más misterio. El POSITION 0 lo ponemos para que sea el primer trigger referente a esa tabla en ejecutarse, piensa que podriamos tener varios triggers por tabla, y claro cuanto antes tengo valor la clave primaria para la tupla a tratar (en el caso de la inserción) mucho mejor.
Esto es muy útil además de conveniente, pues nos simplifica el trabajo de la creación de claves primarias, siempre y cuando se preste a ello claro.
Solo una cosa más, ten cuidado con el SET GENERATOR porque además de inicializar un generador también puedes resetearlo y podrías provocar la duplicación de campos en una tabla, aunque el servidor no lo permitiría, pero bueno es un comentario a tener en cuenta.
Bueno, espero que te haya quedado claro, si tienes cualquier duda pues pregunta que para eso estamos, te aconsejo de todas formas que te bajes y los tengas a mano, los PDFs de la documentación de Interbase 6.0 Open Source, pues los 2 PDFs Data Definition, Language Reference deben estar siempre a mano.
Ciao y suerte. |
|