Alcance
Linguagens: .NET, C/SQL, Visual Basic, Visual FoxPro, Java,
PocketPC
DBMSes: DB2 UDB for ISeries, DB2
Universal Database, Informix, Oracle, SQL Server, PostgreSQL
Descrição
En alguns
casos é necessário obter valores diferentes de um conjunto de atributos. Isto
pode ser resolvido utilizando um corte de controle pelos atributos em questão.
Para permitir resolver este caso de uma maneira mais eficiente, se acrescentou a
cláusula Option Distinct aos comandos For Each y XFor Each.
Por exemplo, suponhamos que se tem uma tabela de Pessoas:
PerCod* Código
PerNom Nome
PerEmail Endereço de email
A forma de obter todos os diferentes endereços de e-mail,
sem duplicações, é:
For Each
Option Distinct
&email = PerEmail
Endfor
Para determinar o conjunto de valores diferentes, são
levados em conta aqueles atributos referenciados no For each.
Considerações gerais
- A cláusula Option Distinct dos comandos For Each é
suportada para geradores Cliente/Servidor e não se aplica -> tabelas
locais.
- Os For Each com Option Distinct não podem
atualizar a base de dados. Também não os For Eachs interiores no caso de cortes
de controle. Os For Eachs anidados sobre outras tabelas sim podem realizar
atualizações.
- Se não for especificada uma ordem
assume-se Order None.
- A cláusula Option Distinct
é suportada no For Each "exterior" no caso de cortes de controle. Os For Eachs
"interiores" herdam el Distinct.
- Os NULLs são
considerados como qualquer outro valor. Isto significa que se um atributo
referenciado tem valor NULL do DBMS em mais de um registro, o For Each devolverá
somente um deles.