CREATE OR REPLACE FUNCTION TURNO_LOCAL(P_NRLOCALPESQ NUMBER, 
                                        P_HORA VARCHAR2,
                                        P_NRORG NUMBER) RETURN NUMBER
IS 
BEGIN
   FOR C_TURNOS IN(SELECT NRTURNOLOCALPESQ, HRINITURNOLOCALPESQ, HRFIMTURNOLOCALPESQ, 
                          CASE WHEN HRINITURNOLOCALPESQ > HRFIMTURNOLOCALPESQ THEN 1 ELSE 0 END AS TURNO_VIRADO
                     FROM TURNOLOCALPESQ WHERE NRLOCALPESQ = P_NRLOCALPESQ AND NRORG = P_NRORG
                    ORDER BY HRINITURNOLOCALPESQ
   )LOOP
      IF C_TURNOS.TURNO_VIRADO = 1 THEN /*SE TURNO VIRADO HORA TEM QUE SER MAIOR QUE INICIAL OU MENOR QUE FINAL*/
         IF (P_HORA >=  C_TURNOS.HRINITURNOLOCALPESQ) OR (P_HORA <= C_TURNOS.HRFIMTURNOLOCALPESQ) THEN
            RETURN C_TURNOS.NRTURNOLOCALPESQ;
         END IF;
      ELSE /*SE TURNO E NO MESMO DIA A HORA TEM QUE SER MAIOR QUE INICIAL E MENOR QUE FINAL*/
         IF (P_HORA >=  C_TURNOS.HRINITURNOLOCALPESQ) AND (P_HORA <= C_TURNOS.HRFIMTURNOLOCALPESQ) THEN 
            RETURN C_TURNOS.NRTURNOLOCALPESQ;
         END IF;
      END IF;
   END LOOP;
   RETURN 0;
END;
/

