Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Duda en Constraint formato de fecha y hora

Estas en el tema de Duda en Constraint formato de fecha y hora en el foro de Oracle en Foros del Web. Hola a todos! tengo el siguiente problema al crear una tabla en oracle. Aqui os pongo la sentencia que tengo: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver ...
  #1 (permalink)  
Antiguo 15/12/2010, 03:45
 
Fecha de Ingreso: diciembre-2010
Mensajes: 3
Antigüedad: 13 años, 11 meses
Puntos: 0
Pregunta Duda en Constraint formato de fecha y hora

Hola a todos!

tengo el siguiente problema al crear una tabla en oracle. Aqui os pongo la sentencia que tengo:


Código SQL:
Ver original
  1. CREATE TABLE Carreras
  2. (
  3.     CODCARRERA VARCHAR2(4),
  4.     FECHAYHORA DATE,
  5.     IMPORTEPREMIO NUMBER(6),
  6.     APUESTALIMITE NUMBER(5,2),
  7.     CONSTRAINT pk_codcarrera
  8.         PRIMARY KEY(CODCARRERA),
  9.     CONSTRAINT con_fechayhora_carrera
  10.     CHECK(FECHAYHORA >= TO_DATE(‘%/%/% 09:00:00’, ‘DD/MM/YYYY HH:MI:SS’) AND FECHAYHORA <= TO_DATE(‘%/%/% 14:30:00’, ‘DD/MM/YYYY HH:MI:SS’)),
  11.     CONSTRAINT con_apuestalimite
  12.         CHECK(APUESTALIMITE < 20000.00)
  13. );


Mi error se presenta en la constraint con_fechayhora_carrera, donde al ejecutar la sentencia me devuelve el siguiente error:

"se ha encontrado un caracter no numérico donde se esperaba uno numérico"

Por mas que lo reviso, no consigo dar con el fallo.

Otra duda que tengo es, donde por ejemplo la fecha "07/05/2010" se me rellenen los huecos vacios como 0, ¿estaria bien especificado en esa constraint?.

Gracias de antemano y un saludo a la comunidad!

Última edición por Cloud007; 15/12/2010 a las 09:27
  #2 (permalink)  
Antiguo 15/12/2010, 09:36
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Duda en Constraint formato de fecha y hora

que fechas quieres validar con esto?
%/%/% ???

mira este tema
http://www.forosdelweb.com/f100/prob...-fecha-866274/

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 15/12/2010, 12:08
 
Fecha de Ingreso: diciembre-2010
Mensajes: 3
Antigüedad: 13 años, 11 meses
Puntos: 0
Respuesta: Duda en Constraint formato de fecha y hora

Muchas gracias por contestar Huesos52.

Veras esa constraint lo que me debe de validar son las horas, la fecha por el momento no me es preciso validarla, pero si la hora, que debe estar comprendida de las 09:00 a las 14:30.

Los %/%/%, ahi se me paso por completo incluirle el LIKE.

He probado incluyendole un FECHAYHORA BETWEEN LIKE TO_DATE(...) e incluso FECHAYHORA >= LIKE TO_DATE(..).

Validar las fechas solo si se como es, lo que no se es como validar solo las horas.

Gracias de antemano y un saludo.
  #4 (permalink)  
Antiguo 15/12/2010, 13:42
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Duda en Constraint formato de fecha y hora

No se puede.
se me ocurre que utilices una fecha estandar. Y al momento de hacer las inserciones en tu tabla siempre se hagan con esa fecha. De esta forma siempre respetará el constraint.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 16/12/2010, 01:36
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 17 años, 5 meses
Puntos: 43
Respuesta: Duda en Constraint formato de fecha y hora

Parece que oracle no te deja jugar con fechas en una check.

Prueba a crear un trigger before insert.

SQL > CREATE TABLE Carreras
2 (
3 CODCARRERA VARCHAR2(4),
4 FECHAYHORA DATE,
5 IMPORTEPREMIO NUMBER(6),
6 APUESTALIMITE NUMBER(5,2)
7 );

Tabla creada.

SQL >
SQL >
SQL >
SQL >
SQL > CREATE OR REPLACE TRIGGER PRUEBA_CHECK
2 BEFORE INSERT ON
3 CARRERAS
4 REFERENCING
5 NEW AS New
6 OLD AS Old
7 FOR EACH ROW
8 DECLARE
9 fechayhora_CHAR VARCHAR2(50);
10 BEGIN
11 fechayhora_CHAR := TO_CHAR(:NEW.FECHAYHORA,'DD-MM-YYYY HH24:MI:SS');
12 IF TO_DATE (FECHAYHORA_CHAR,'DD-MM-YYYY HH24:MI:SS') < TO_DATE('09:00:00', 'HH24:MI:SS') OR
13 TO_DATE (FECHAYHORA_CHAR,'DD-MM-YYYY HH24:MI:SS') > TO_DATE('14:00:00', 'HH24:MI:SS') THEN
14 RAISE_APPLICATION_ERROR(-20001,'HORA INCORRECTA ');
15 END IF;
16 END;
17 /

Disparador creado.

SQL > SELECT TO_CHAR(SYSDATE,'DD-MM-YYYY HH24:MI:SS') FROM DUAL;

TO_CHAR(SYSDATE)
-------------------
16-12-2010 08:34:41

SQL > INSERT INTO CARRERAS
2 ( CODCARRERA,FECHAYHORA,IMPORTEPREMIO,APUESTALIMITE)
3 VALUES
4 ('999',SYSDATE,1,66)
5 /
INSERT INTO CARRERAS
*
ERROR en línea 1:
ORA-20001: HORA INCORRECTA
ORA-06512: at "XXXXXX.PRUEBA_CHECK", line 7
ORA-04088: error during execution of trigger 'XXXXXX.PRUEBA_CHECK'


SQL >
  #6 (permalink)  
Antiguo 20/12/2010, 07:16
 
Fecha de Ingreso: diciembre-2010
Mensajes: 3
Antigüedad: 13 años, 11 meses
Puntos: 0
Respuesta: Duda en Constraint formato de fecha y hora

Muchas gracias a todos por vuestras respuestas.

Al final lo consegui solucionar de la siguiente manera:

Código SQL:
Ver original
  1. CREATE TABLE Carreras
  2. (
  3.     CODCARRERA VARCHAR2(4),
  4.     FECHAYHORA DATE,
  5.     IMPORTEPREMIO NUMBER(6),
  6.     APUESTALIMITE NUMBER(7,2),
  7.     CONSTRAINT pk_codcarrera
  8.         PRIMARY KEY(CODCARRERA),
  9.     CONSTRAINT con_fechayhora_carreras
  10.         CHECK(TO_CHAR(FECHAYHORA,'HH24:MI')>='09:00'
  11.         AND TO_CHAR(FECHAYHORA,'HH24:MI')<='14:30'),
  12.     CONSTRAINT con_apuestalimite
  13.         CHECK(APUESTALIMITE<20000.00)
  14. );

Muchas gracias a todos y perdonar por la tardanza en responder.

Etiquetas: constraint, formato, fechas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:12.