create or replace FUNCTION LIMITE_SEGURANCA_PRATO(
   P_CDFILIAL  IN FILIAL.CDFILIAL%TYPE,
   P_CDSERVFILI IN SERVICO.CDSERVFILI%TYPE,
   P_CDFILAUXPRAT IN PRATO.CDFILAUXPRAT%TYPE,
   P_CDPRATO IN PRATO.CDPRATO%TYPE,
   P_CDPRODUTO IN PRODUTO.CDPRODUTO%TYPE) RETURN VARCHAR2
AS
   V_NRLIMISEGU   VARCHAR2(3);
BEGIN
    V_NRLIMISEGU := '0';
    BEGIN
    SELECT (A.QTLIMSEGPRAT) + (A.QTLIMSEGPROD)
    INTO V_NRLIMISEGU
    FROM
      (SELECT (NVL(P.QTLIMSEGSERV,'0')) QTLIMSEGPRAT, NVL(R.QTLIMSEGSERV,'0') QTLIMSEGPROD , 0 AS ORDEM
         FROM PRATSERV P INNER JOIN RECESERV R ON (P.CDPRATO = P_CDPRATO AND P.CDFILAUXPRAT = P_CDFILAUXPRAT AND P.CDFILIAL = P_CDFILIAL AND P.CDSERVFILI = P_CDSERVFILI
         AND R.CDPRATO = P_CDPRATO AND R.CDFILAUXPRAT = P_CDFILAUXPRAT AND R.CDFILIAL = P_CDFILIAL AND R.CDSERVFILI = P_CDSERVFILI AND R.CDPRODUTO = P_CDPRODUTO)
      UNION ALL
      
      SELECT (NVL(P.QTLIMSEGFILI,'0')) QTLIMSEGPRAT, NVL(R.QTLIMSEGFILI,'0') QTLIMSEGPROD , 1 AS ORDEM
        FROM PRATFILI P INNER JOIN RECEFILI R ON (P.CDPRATO = P_CDPRATO AND P.CDFILAUXPRAT = P_CDFILAUXPRAT AND P.CDFILIAL = P_CDFILIAL AND
                                                  R.CDPRATO = P_CDPRATO AND R.CDFILAUXPRAT = P_CDFILAUXPRAT AND R.CDFILIAL = P_CDFILIAL AND R.CDPRODUTO = P_CDPRODUTO)
       WHERE
          NOT EXISTS (SELECT 1 FROM  PRATSERV P INNER JOIN RECESERV R ON (P.CDPRATO = P_CDPRATO AND P.CDFILAUXPRAT = P_CDFILAUXPRAT AND P.CDFILIAL = P_CDFILIAL AND P.CDSERVFILI = P_CDSERVFILI
          AND R.CDPRATO = P_CDPRATO AND R.CDFILAUXPRAT = P_CDFILAUXPRAT AND R.CDFILIAL = P_CDFILIAL AND R.CDSERVFILI = P_CDSERVFILI AND R.CDPRODUTO = P_CDPRODUTO))
      UNION ALL
      
      SELECT (NVL(P.QTLIMSEGPADR,'0')) QTLIMSEGPRAT, NVL(R.QTLIMSEGPADR,'0') QTLIMSEGPROD , 2 AS ORDEM
        FROM PRATPADR P INNER JOIN RECEPADR R ON (P.CDPRATO = P_CDPRATO AND P.CDFILAUXPRAT = P_CDFILAUXPRAT AND
                                                  R.CDPRATO = P_CDPRATO AND R.CDFILAUXPRAT = P_CDFILAUXPRAT AND R.CDPRODUTO = P_CDPRODUTO)   
       WHERE
          NOT EXISTS (SELECT 1 FROM PRATFILI P INNER JOIN RECEFILI R ON (P.CDPRATO = P_CDPRATO AND P.CDFILAUXPRAT = P_CDFILAUXPRAT AND P.CDFILIAL = P_CDFILIAL AND
                                                  R.CDPRATO = P_CDPRATO AND R.CDFILAUXPRAT = P_CDFILAUXPRAT AND R.CDFILIAL = P_CDFILIAL AND R.CDPRODUTO = P_CDPRODUTO))
         AND NOT EXISTS (SELECT 1 FROM  PRATSERV P INNER JOIN RECESERV R ON (P.CDPRATO = P_CDPRATO AND P.CDFILAUXPRAT = P_CDFILAUXPRAT AND P.CDFILIAL = P_CDFILIAL AND P.CDSERVFILI = P_CDSERVFILI
         AND R.CDPRATO = P_CDPRATO AND R.CDFILAUXPRAT = P_CDFILAUXPRAT AND R.CDFILIAL = P_CDFILIAL AND R.CDSERVFILI = P_CDSERVFILI AND R.CDPRODUTO = P_CDPRODUTO))
      
      
      ) A;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
              V_NRLIMISEGU := '0';
      END;
      RETURN(V_NRLIMISEGU);
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('LIMITE_SEGURANCA_PRATO','6.05.000'); END;
/
