Ver Mensaje Individual
  #33 (permalink)  
Antiguo 20/02/2003, 08:50
Avatar de mauriciolangea
mauriciolangea
 
Fecha de Ingreso: enero-2002
Mensajes: 59
Antigüedad: 22 años, 4 meses
Puntos: 0
Tema : Interbase/Firebird

Pregunta : ¿Como creo campos auto incremenables?

Respuesta

Para este punto, InterBase/Firebird usa generadores (generators), así como Oracle usa Secuencias. Cada generador tiene un valor, a continuación mostraré unos ejemplos de como usar los Generadores :


CREATE TABLE prueba
(
campo1 integer not null,
campo2 char(10),
PRIMARY KEY (campo1)
);

CREATE GENERATOR gen_prueba_id;


Para insertar valores:


INSERT INTO prueba (campo1, campo2) VALUES (gen_id(gen_prueba_id, 1), 'prueba me');


Para el mismo INSERT, también podrías crear un TRIGGER:


SET TERM ^ ;
CREATE TRIGGER prueba_bi FOR prueba
BEFORE INSERT POSITION 0
AS
BEGIN
if (new.campo1 is null) then
new.campo1 = gen_id(gen_prueba_id, 1);
END^
SET TERM ; ^


y el INSERT quedaría así :


INSERT INTO prueba (campo2) VALUES ('prueba me');


Puedes notar que ya en el INSERT no aparece el primer campo, esto es porque al realizar el INSERT, lo que hace es ejecutar el TRIGGER, que antes de insertar (BEFORE INSERT), revisa si CAMPO1 es nulo, si lo es, ejecuta el GENERADOR gen_prueba_id.

Esto puede parecer un poco complicado, pero los generadores te dan mayor potencia que los campos autoincrementables, puesto que simpre puedes leer un generador sin incrementarlo:


SELECT gen_id(gen_prueba_id, 0) FROM ...


y para cambiar el valor actual del generador con:


SET GENERATOR gen_prueba_id TO [algún_valor];

Última edición por mauriciolangea; 30/04/2006 a las 10:13