• Miércoles 24 de Abril de 2024, 04:32

Autor Tema:  Table Check Con Date En Db2  (Leído 1593 veces)

Alpha_

  • Miembro activo
  • **
  • Mensajes: 72
    • Ver Perfil
Table Check Con Date En Db2
« en: Domingo 24 de Septiembre de 2006, 23:17 »
0
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:

Código: Text
  1. 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  )&#59;
  2.  

Pero en fin, la parte interesante es esta:

Código: Text
  1. CREATE TABLE ALPHA.USUARIOS ( [...], FECHANAC DATE  NOT NULL , [...], CONSTRAINT EDADMAYOR21 CHECK (year((CURRENT DATE) - FECHANAC) >= 21)  ENFORCED  ENABLE QUERY OPTIMIZATION  )&#59;
  2.  

Citar
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.
Alpha
http]

Alpha_

  • Miembro activo
  • **
  • Mensajes: 72
    • Ver Perfil
Re: Table Check Con Date En Db2
« Respuesta #1 en: Lunes 25 de Septiembre de 2006, 17:26 »
0
Les cuento que (no tan) felizmente, encontré el drama. Resulta que los checks en DB2 no pueden ser hechos con algún registro de tipo especial. El current date es un registro especial en DB2, que puede saltarse haciendo una consulta a una tabla de sistema que me puede devolver la fecha y hora actual... sin embargo, eso significaría hacer una subconsulta en el check, y a la vez acceder a otra tabla, cosas que no se permiten en el código check de una tabla.

Alguien con alguna idea de un workaround?

Gracias desde ya.
Alpha
http]