Patrocinado por
Patrocinado por Inetum

As duplas negativas dos RANGEs

images/thumbnail.jpg - Thumbnail

Os RANGEs têm propriedades interessantes.

Por exemplo, estas duas linhas parecem a mesma coisa mas não são:

Sign | Option | Low

—|—|—

I | NE | X

E | EQ | X

Marado, né?

Ontem cruzei-me com outro tipo de dupla negação bizarra no qual nunca tinha pensado. Quando usamos um RANGE como critério no WHERE de um SELECT e este está vazio, o critério devolve sempre TRUE. É contra-intuitivo porque o correcto seria dar FALSE (em rigor o valor a comparar não está no RANGE) mas dá imenso jeito que assim seja. O RANGE vazio funciona como um wildcard. Ok.

Mas, e se se usar o NOT assim:

DATA r TYPE RANGE of kunnr.

SELECT * FROM kna1 INTO TABLE @data(t)
WHERE kunnr NOT IN r.

Portanto, o RANGE está vazio e por isso logicamente que qualquer KUNNR não se encontra lá e como tal o NOT IN r deveria dar TRUE. Mas, como o RANGE vazio funciona como wildcard e devolve TRUE quando deveria devolver FALSE,… a negação devolve FALSE quando deveria devolver TRUE. E ainda bem. Acho eu…

O Abapinho saúda-vos.