DROP FUNCTION ULTIMA_ANALISE_LOTE
/
DROP TYPE ULTIMA_ANALISE
/
DROP TYPE ULT_ANALISE
/

CREATE OR REPLACE TYPE ULT_ANALISE AS OBJECT
(NRAUDITORIA VARCHAR2(10),
 DTVALANA DATE,
 IDTIPOANA VARCHAR2(1),
 IDSTATUSAUDI VARCHAR2(1));
/

CREATE OR REPLACE TYPE ULTIMA_ANALISE IS TABLE OF ULT_ANALISE
/

CREATE OR REPLACE FUNCTION ULTIMA_ANALISE_LOTE(P_CDFILIAL   IN VARCHAR2,
                                               P_CDPRODUTO  IN VARCHAR2,
                                               P_NRLOTEESTQ IN VARCHAR2,
                                               P_NRSUBLOTE  IN VARCHAR2) RETURN ULTIMA_ANALISE PIPELINED
IS
   V_NRAUDITORIA VARCHAR2(10);
   V_DTVALANA DATE;
   V_IDTIPOANA VARCHAR2(1);
   V_IDSTATUSAUDI VARCHAR2(1);

   OUT_ULT_ANALISE ULT_ANALISE := ULT_ANALISE('','','', '');

   CURSOR C_AUDITORIA IS
      SELECT MAX(A.NRAUDITORIA), A.DTVALANA, A.IDTIPOANA, A.IDSTATUSAUDI
        FROM AUDITORIA A, PARAMETROQPR P
       WHERE ((A.CDFILIAL = P_CDFILIAL) OR (A.CDFILIAL = P.CDFILICONTANAUNI))
         AND P.CDFILIAL = A.CDFILIAL(+)
         AND A.CDPRODUTO = P_CDPRODUTO
         AND A.NRLOTEESTQ = P_NRLOTEESTQ
         AND A.NRSUBLOTE = P_NRSUBLOTE
         AND A.IDSTATUSAUDI <> '3'
       GROUP BY A.DTVALANA, A.IDTIPOANA, A.IDSTATUSAUDI
       ORDER BY MAX(A.NRAUDITORIA);
BEGIN
   OPEN C_AUDITORIA;
   LOOP
      FETCH C_AUDITORIA INTO V_NRAUDITORIA, V_DTVALANA, V_IDTIPOANA, V_IDSTATUSAUDI;
      EXIT WHEN C_AUDITORIA%NOTFOUND;

      OUT_ULT_ANALISE.NRAUDITORIA  := V_NRAUDITORIA;
      OUT_ULT_ANALISE.DTVALANA     := V_DTVALANA;
      OUT_ULT_ANALISE.IDTIPOANA    := V_IDTIPOANA;
      OUT_ULT_ANALISE.IDSTATUSAUDI := V_IDSTATUSAUDI;
   END LOOP;
   PIPE ROW(OUT_ULT_ANALISE);

   CLOSE C_AUDITORIA;

   RETURN;
EXCEPTION
   WHEN OTHERS THEN
      IF C_AUDITORIA%ISOPEN THEN
         CLOSE C_AUDITORIA;
      END IF;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('ULTIMA_ANALISE_LOTE','6.19.XXX'); END;
/
