/**
 * Procura o valor na tabela lista ou em uma string de valores e retorna o número de ocorrências
 * 
 * @param {Varchar2} P_VALOR Valor a ser pesquisado
 * @param {Varchar2} P_LISTA Lista de valores. Pode ser uma lista concatenada ou a chave de uma tabela LISTA
 */
CREATE OR REPLACE FUNCTION VALOR_NA_LISTA
(
  P_VALOR IN VARCHAR2,
  P_LISTA IN VARCHAR2,
  P_DELIMIT IN VARCHAR2 DEFAULT '_',
  P_TODOS IN VARCHAR2 DEFAULT 'T'
)
RETURN NUMBER
AS
V_EXISTE NUMBER;
BEGIN
  IF (P_LISTA = P_TODOS) THEN
    RETURN 1;
  END IF;

  IF (P_VALOR IS NULL) THEN
    RETURN 0;
  END IF;
  
  IF (SUBSTR(P_LISTA, 0, 9) = '_NRLISTA=') THEN
    SELECT COUNT(1) INTO V_EXISTE 
      FROM LISTA
        WHERE NRLISTA = SUBSTR(P_LISTA, 10)
          AND CDLISTA = P_VALOR;    
    RETURN V_EXISTE;
  END IF;
  
  RETURN INSTR(P_DELIMIT||P_LISTA||P_DELIMIT, P_DELIMIT||P_VALOR||P_DELIMIT);
END;
/