Buenas.. antes que nada pido disculpas porque anduve desaparecidísimo hasta que tuve este drama y volví para preguntar a ver si alguien podía darme un mano. Prometo pasarme más seguido luego, sólo dejenmé terminar este año de universidad. =^_^=
En cuanto a mi problema, es el siguiente:
Yo estoy haciendo en DB2 (8.1) una base de datos, con una tabla llamada "Usuarios", en la cual tendré datos de distintos usuarios que interactuarán con el sistema.
Ahora, resulta que necesito que esos usuarios tengan una edad mayor a 21 para poder registrarse, lo cual resolví con un table check.
Sin embargo, el motor no quiere tomarme ese table check. Esta es la sentencia que crea la tabla con el constraint:
CREATE TABLE ALPHA.USUARIOS ( NOMBRE VARCHAR (30) NOT NULL , APELLIDO VARCHAR (30) NOT NULL , ID_CIUDAD BIGINT NOT NULL , TELEFONO VARCHAR (15) NOT NULL , INTERNO VARCHAR (3) NOT NULL , APODO VARCHAR (10) NOT NULL , CLAVE VARCHAR (10) NOT NULL , EMAIL VARCHAR (20) NOT NULL , FECHANAC DATE NOT NULL , ID_USUARIO BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 0, INCREMENT BY 1, NO CACHE ) , CONSTRAINT PK_USUARIO PRIMARY KEY ( ID_USUARIO) , CONSTRAINT FK_CIUDAD FOREIGN KEY (ID_CIUDAD) REFERENCES ALPHA.CIUDADES (ID_CIUDAD) ON DELETE RESTRICT ON UPDATE RESTRICT ENFORCED ENABLE QUERY OPTIMIZATION , CONSTRAINT EDADMAYOR21 CHECK (year((CURRENT DATE) - FECHANAC) >= 21) ENFORCED ENABLE QUERY OPTIMIZATION );
Pero en fin, la parte interesante es esta:
CREATE TABLE ALPHA.USUARIOS ( [...], FECHANAC DATE NOT NULL , [...], CONSTRAINT EDADMAYOR21 CHECK (year((CURRENT DATE) - FECHANAC) >= 21) ENFORCED ENABLE QUERY OPTIMIZATION );
SQL0546N La restricción de comprobación "EDADMAYOR21" no es válida.
Por lo que he investigado, el código del constraint parece estar impecable, pero aún así no lo quiere tomar. El motor me informa de varias causas que pueden ser el origen del error, pero ninguna de ellas han sido...
Alguien puede ayudarme un poquito? Les agradezco desde ya un montón.