CREATE OR REPLACE PROCEDURE ATUALIZA_TIPOPACI(P_DTDATA DATE,
                                              P_CDFILIAL IN PACIENTE.CDFILIAL%TYPE)
AS
  V_CDTIPOPACI PACIENTE.IDTIPOPACI%TYPE;

BEGIN

   FOR PACI IN (SELECT FLOOR(MONTHS_BETWEEN(P_DTDATA, DTNASCPACI)/12)AS IDADE, CDPACIENTE
                FROM PACIENTE
                WHERE(IDTIPOPACI <= '4')  OR
                     (IDTIPOPACI IS NULL) AND
                     (CDFILIAL = P_CDFILIAL)) LOOP

      IF PACI.IDADE <= '0,11' THEN
         V_CDTIPOPACI := '0';
      ELSE
         IF PACI.IDADE >= '1' AND PACI.IDADE <= '9,11' THEN
            V_CDTIPOPACI := '1';
         ELSE
            IF PACI.IDADE >= '10' AND PACI.IDADE <= '18,11' THEN
               V_CDTIPOPACI := '2';
            ELSE
               IF PACI.IDADE >= '19' AND PACI.IDADE <= '64,11' THEN
                  V_CDTIPOPACI := '3';
               ELSE
                  IF PACI.IDADE >= '65' THEN
                     V_CDTIPOPACI := '4';
                  END IF;
               END IF;
            END IF;
         END IF;
      END IF;
        
      UPDATE PACIENTE
      SET IDTIPOPACI = V_CDTIPOPACI
      WHERE(CDPACIENTE = PACI.CDPACIENTE) AND
           (CDFILIAL   = P_CDFILIAL) ;
   END LOOP;
   commit;
END;

/
