Pular para o conteúdo

Fóruns SQL e PL/SQL Validar se todos os valores da cláusula “in” existem Responder a: Validar se todos os valores da cláusula “in” existem

#157048
Avatar photoJosé Laurindo Chiappa
Moderador

    Obviamente, só lembrando :

    1) isso depende da tool de desenvolvimento usada, mas VIA DE REGRA, é quase sempre possível manipular o comando SQL que a tool de desenv vai mandar pro banco, dinamicamente incluindo os valores do IN nele : é algo a validar

    2) nos releases mais recentes, vc pode ter a tal “tabela com os valores” sendo criada LOGICAMENTE, em memória : UMA das maneiras de vc fazer isso é, por exemplo, passar uma string no formato XML com os valores necessários e “criar a tabela com os valores do IN” via função built-in XMLTABLE, digamos…. Há também algumas built-ins para JSON, se este é o formato que a pessoa prefere/conhece…

    3) Há funções que trabalham/podem trabalhar com dados da tabela inteira, como LISTAGG ou funções analíticas sem a cláusula de Partition : seria meio complicado de escrever mas Talvez se possa filtrar os valores dinamicamente do IN com elas

    4) é possível (numa variação da opção 2 acima) se passar uma string, dinâmica, com os valores a restringir e validar no WHERE se a coluna CAMPO1 está contida nessa string, respeitando separadores : isso quem poderia fazer é a REGEXP_LIKE, é ainda outra opção…

    5) o Óbvio ululante : como estamos falando aqui de POUCOS valores , pode ser que seja viável termos vários Parâmetros/variáveis que possam ser preenchidos com os diversos valores da lista de comparação, aí ao invés de :

    CAMPO1 in (‘valor1’, ‘valor2’, ‘valor3’)

    teríamos :

    WHERE …
    AND ( CAMPO1 = nvl(:V1, CAMPO1)
    OR CAMPO1 = nvl(:V2, CAMPO1)
    OR CAMPO1 = nvl(:V3, CAMPO1)
    OR CAMPO1 = nvl(:V4, CAMPO1)
    )
    ….

    supondo que ao menos o primeiro valor seja sempre preenchido, aí seria só uma questão de Nulificar os demais que não forem necessários…

    Abraços,

    Chiappa