Estou procurando uma maneira simples de ver quais itens em minha IN-LIST não estão realmente na tabela. Parecia muito simples, mas acho que provavelmente estou pensando demais.
Tenho uma longa lista de códigos de itens fornecidos por um cliente e eles gostariam de atualizar um atributo na tabela para cada um desses códigos de itens. No entanto, preciso informar ao cliente se algum dos códigos que ele forneceu realmente não existe na tabela. Eu tentei fazer um COUNT (*) e um GROUP BY e tentei algumas variações usando MINUS, mas sempre se resume ao fato de que, se o valor não estiver no IN-LIST, não posso me referir a ele .
Exemplo: a tabela de itens tem 3 entradas
Item_code
12345
98765
65436
Lista de suprimentos do usuário de
12345
98765
65436
81764
Quero destacar ao cliente que o código '81764' não é um código de item válido. Posso fazer isso facilmente com PL/SQL, mas gostaria de uma solução SQL, se possível.
Você precisa criar uma lista de valores que, infelizmente, é bastante complicada no Oracle (devido à
values()
cláusula ausente).Mas o seguinte funcionará:
Mas, dada a natureza da consulta, isso é um pouco complicado de parametrizar. A melhor solução é provavelmente criar uma tabela temporária (global), colocar a lista de IDs que você recebe nessa tabela e usá-la em vez da expressão de tabela comum (a
with (...)
parte)Editar
Existe uma maneira (incômoda) de "explodir" uma lista de valores separada por vírgulas, que pode ser "mais fácil" neste caso:
Mas isso pode atingir rapidamente o limite de 4.000 bytes do Oracle para uma string literal....