› 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
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