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

Dudas con date

Estas en el tema de Dudas con date en el foro de Oracle en Foros del Web. Hola buenos dias tengo un problema, estoy generando un SP en oracle 11g que recibe los parametros de entrada para actualizar o insertar a una ...
  #1 (permalink)  
Antiguo 24/12/2015, 06:53
Avatar de cranmp  
Fecha de Ingreso: enero-2015
Ubicación: santiago
Mensajes: 5
Antigüedad: 5 años
Puntos: 0
Pregunta Dudas con date

Hola buenos dias

tengo un problema, estoy generando un SP en oracle 11g que recibe los parametros de entrada para actualizar o insertar a una persona, el tema es que la fecha de nacimiento, haga lo que haga me da un error de incompatibilidad de typos de datos dejare el codigo y el error que me da al probar el sp, si alguno me puede hechar una mano, se los agradeceria

Saludos
Código:
CREATE OR REPLACE PROCEDURE ESPADM.SP_UPS_DATOS_PERS
--sp Encargado de actualizar o insertar nuevas personas segun si el rut exista o no en la tabla Personal
(vRUT               IN  NUMBER,
 vNOMBRE            IN  VARCHAR2,
 vAPELLIDOMATERNO   IN  VARCHAR2,
 vAPELLIDOPATERNO   IN  VARCHAR2,
 vFECNAC            IN  DATE,
 vSEXO              IN  NUMBER,
 vPROFESION         IN  NUMBER,
 vESTADOCIVIL       IN  NUMBER,
 vNACIONALIDAD      IN  NUMBER,
 COD_MENSAJE        OUT VARCHAR2,
 DESCRIP_MENSAJE    OUT VARCHAR2) IS
 
 ENCONTRADO NUMBER(10):=0;
 
  BEGIN
       
        SELECT RUT
          INTO ENCONTRADO
          FROM ESPADM.PERSONAL 
         WHERE vRUT =RUT;
                 
          IF ENCONTRADO !=0 THEN
           UPDATE ESPADM.PERSONAL SET        
                   DV                   = ESPADM.FNC_DV(ENCONTRADO),-- funciontion que calcula el digito verificador y devuelve un char
                   FECHA_INGRESO        = SYSDATE,
                   NOMBRES              = vNOMBRE,
                   APELLIDOMATERNO      = vAPELLIDOMATERNO,
                   APELLIDOPATERNO      = vAPELLIDOPATERNO,
                   FECHA_NACIMIENTO     = TO_DATE(TO_CHAR(vFECNAC,'DD-MM-YYYY'),'DDMMYYYY'),
                   CODIGOSEXO           = vSEXO,
                   CODIGOESTADOCIVIL    = vESTADOCIVIL,
                   CODIGOPROFESION      = vPROFESION,
                   CODIGONACIONALIDAD   = vNACIONALIDAD,
                   CODIGOCANAL          = ESPADM.SQ_COD_CAN_PB.NEXTVAL,-- secuencia ciclica del 1-10
                   NUMBEROPROCESO       = TO_DATE(SYSDATE)||ESPADM.SQ_COD_CAN_PB.CURRVAL
             WHERE vRUT = RUT ;
            COMMIT;
          ELSE
          INSERT INTO ESPADM.PERSONAL
          (RUT,DV,FECHA_INGRESO,NOMBRES,APELLIDOMATERNO,APELLIDOPATERNO,FECHA_NACIMIENTO,CODIGOSEXO,
            CODIGOESTADOCIVIL,CODIGONACIONALIDAD,CODIGOPROFESION,NUMBEROPROCESO,CODIGOCANAL)
            VALUES
            (vRUT,ESPADM.FNC_DV(vRUT),SYSDATE, vNOMBRE, vAPELLIDOMATERNO, vAPELLIDOPATERNO, vFECNAC, vSEXO,vESTADOCIVIL,
             vNACIONALIDAD,vPROFESION,TO_DATE(SYSDATE)||ESPADM.SQ_COD_CAN_PB.CURRVAL,
             ESPADM.SQ_COD_CAN_PB.NEXTVAL);
  COMMIT;     
           
    END IF;       
 END;
/

Código:
ORA-06550: line 19, column 14:
PLS-00382: expression is of wrong type
ORA-06550: line 19, column 3:
PL/SQL: Statement ignored
ese error me aparece
  #2 (permalink)  
Antiguo 24/12/2015, 07:10
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 12 años, 2 meses
Puntos: 85
Respuesta: Dudas con date

Es difícil saber el problema sin la definición de la tabla y la linea 19 no está clara cual es. Pero el error puede estar en las siguientes lineas.

1. En el update dentro de la función fnc_dv

DV = ESPADM.FNC_DV(ENCONTRADO)

2. En el update, vFECNAC ya es tipo date, no hace falta la conversión, además las máscaras son diferentes.

FECHA_NACIMIENTO = TO_DATE(TO_CHAR(vFECNAC,'DD-MM-YYYY'),'DDMMYYYY')

Saludos

Etiquetas: 11g
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 01:30.