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

Error en procedimiento con fecha

Estas en el tema de Error en procedimiento con fecha en el foro de Oracle en Foros del Web. Hola, tengo un problema al insertar las fechas en un procedimiento para crear un empleado automaticamente. Error : "day of month must be between 1 ...
  #1 (permalink)  
Antiguo 18/12/2013, 06:20
 
Fecha de Ingreso: noviembre-2012
Ubicación: Spain
Mensajes: 28
Antigüedad: 12 años
Puntos: 0
Error en procedimiento con fecha

Hola, tengo un problema al insertar las fechas en un procedimiento para crear un empleado automaticamente.

Error : "day of month must be between 1 and last day of month"

Tabla-----------

Código SQL:
Ver original
  1. CREATE TABLE EMPLEADOS(
  2.  
  3.   OID_Emp INTEGER NOT NULL,
  4.   OID_Pue INTEGER NOT NULL,
  5.   Salario NUMBER(10,2) NOT NULL,
  6.   FInicioContrato DATE NOT NULL,
  7.   FFinContrato DATE NOT NULL,
  8.   PRIMARY KEY(OID_Emp),
  9.   FOREIGN KEY(OID_Pue) REFERENCES PUESTOS
  10.  
  11. );
Procedimiento--------------
Código SQL:
Ver original
  1. CREATE OR REPLACE PROCEDURE CREAR_EMPLEADO
  2.   (wPuesto IN puestos.oid_pue%TYPE,
  3.   wNombre IN empleados.nombre%TYPE,
  4.   wApellidos IN empleados.apellidos%TYPE,
  5.   wSexo IN empleados.sexo%TYPE,
  6.   wNIF IN empleados.nif%TYPE,
  7.   wFNac IN empleados.fnac%TYPE,
  8.   wSalario IN empleados.salario%TYPE,
  9.   wFInicioContrato IN empleados.finiciocontrato%TYPE,
  10.   wFFinContrato IN empleados.ffincontrato%TYPE)
  11.   IS
  12.   BEGIN
  13.     INSERT INTO empleados VALUES
  14.     ('',wPuesto, wNombre, wApellidos, wSexo, wNIF,TO_DATE('wFNac','DD/MM/YYYY'), wSalario, TO_DATE('wFInicioContrato','DD/MM/YYYY'), TO_DATE('wFFinContrato','DD/MM/YYYY'));
  15.  
  16.   END;
  17.   /

EXECUTE CREAR_EMPLEADO ('2','JUAN','MEDINA', 'H', '32145678Z', '01/05/1999', '1000', '01/05/1999', '01/05/1999');


Gracias de antemano.

Última edición por gnzsoloyo; 18/12/2013 a las 06:39
  #2 (permalink)  
Antiguo 18/12/2013, 06:39
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Error en procedimiento con fecha

Hasta lo que veo, tienes al menos un error: 'wFNac' no es el parámetro de entrada wFNac, sino una cadena que dice 'wFNac'. Y lo mismo vale para 'wFInicioContrato' y 'wFFinContrato'.

Además, ¿me puedes decir qué es el primer campo, qué tipo de dato tiene, y por qué le pones una cadena vacía?

Por otro lado, estás dandonos una falsa impresión de la tabla, porque tus parámetros nos dicen que hay más campos de los que nos muestras. Cuando pongas el CREATE TABLE, pornlo COMPLETO.

Todo aquello que omitas decirnos puede ser precisamente la causa del error.

Finalmente: Se considera buena práctica que se indiquen específicamente las columnas que se ingresan, aunque se ingresen todas, y especialmente si se ingresan sólo algunas. Eso evitará errores de análisis, y ajustará la performance de la consulta.
Código SQL:
Ver original
  1. CREATE OR REPLACE PROCEDURE CREAR_EMPLEADO
  2.   (wPuesto IN puestos.oid_pue%TYPE,
  3.   wNombre IN empleados.nombre%TYPE,
  4.   wApellidos IN empleados.apellidos%TYPE,
  5.   wSexo IN empleados.sexo%TYPE,
  6.   wNIF IN empleados.nif%TYPE,
  7.   wFNac IN empleados.fnac%TYPE,
  8.   wSalario IN empleados.salario%TYPE,
  9.   wFInicioContrato IN empleados.finiciocontrato%TYPE,
  10.   wFFinContrato IN empleados.ffincontrato%TYPE)
  11. IS
  12. BEGIN
  13.     INSERT INTO empleados --(faltan las columnas)
  14.     VALUES ('', wPuesto, wNombre, wApellidos, wSexo, wNIF, TO_DATE(wFNac, 'DD/MM/YYYY'),
  15.                  wSalario, TO_DATE(wFInicioContrato, 'DD/MM/YYYY'),
  16.                  TO_DATE(wFFinContrato, 'DD/MM/YYYY'));
  17.   END;
  18.   /
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 18/12/2013, 07:45
 
Fecha de Ingreso: noviembre-2012
Ubicación: Spain
Mensajes: 28
Antigüedad: 12 años
Puntos: 0
Respuesta: Error en procedimiento con fecha

Muchas gracias, he quitado los to_date y he puesto las columnas. Con ello se ha solucionado todo.

De nuevo muchas gracias.

Un saludo.
  #4 (permalink)  
Antiguo 18/12/2013, 08:06
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Error en procedimiento con fecha


Eso se me escapó, pero es cierto: si los parametros de entrada eran DATE (al tomarlos de la tabña), entonces el uso de TO_DATE() debería disparar un error en Oracle.
Buena corrección.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: fecha, procedimiento
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 08:18.