miércoles, 11 de junio de 2014

Un poco de DB2:

Para generar una columna identity en DB2 para una tabla, podemos hacerlo de dos formas:
  • con "GENERATE BY DEFAULT".- de esta forma podríamos enviarle valores en un insert a la columna identity.
  • con "GENERATE ALWAYS".- de esta manera, el manejador No nos permitiría enviarle valores a la columna identity.
La diferencia entre una y otra es que en la primera DB2 nos permite enviarle valores en un insert a la columna identity y se respetan estos valores; con "GENERATE ALWAYS" no lo permite.

Veamos un ejemplo:

CREATE TABLE TABLA_GBD
( ID_FILA INT NOT NULL GENERATED BY DEFAULT AS IDENTITY
         (START WITH 1, INCREMENT BY 1, NO CACHE),
  COLUMNA_1 CHAR(10)
);


Cuando insertemos registros se autoincrementará el valor de la columna ID_FILA.

INSERT INTO TABLA_GBD (COLUMNA_1) VALUES ('PRUEBA');
INSERT INTO TABLA_GBD (COLUMNA_1) VALUES ('PRUEBA');
INSERT INTO TABLA_GBD (ID_FILA,COLUMNA_1) VALUES (8,'PRUEBA');
INSERT INTO TABLA_GBD (COLUMNA_1) VALUES ('PRUEBA');

Si hacemos SELECT, el resultado será el siguiente:

ID_FILA | COLUMNA_1
1 | PRUEBA   
2 | PRUEBA   
8 | PRUEBA   
3 | PRUEBA     


Si en el CREATE de la tabla hubiéramos puesto GENERATE ALWAYS a la columna identity, no podríamos ejecutar el tercer INSERT con el valor de la columna; ahí radica la diferencia.

Nota: Existen otras diferencias, pero el objetivo de esta entrada era comentar la principal de ellas.