Alcance
Lenguajes: .NET,
C/SQL, Visual Basic, Visual FoxPro, Java, PocketPC
DBMSes: DB2 UDB for ISeries, DB2 Universal Database,
Informix, Oracle, SQL Server, PostgreSQL
Descripción
En algunos
casos es necesario obtener valores diferentes de un conjunto de atributos. Esto
se puede resolver utilizando un corte de control por los atributos en cuestión.
Para permitir resolver este caso de una manera más eficiente, se agregó la
cláusula Option Distinct a los comandos For Each y XFor Each.
Por ejemplo, supongamos que se tiene una tabla de
Personas:
PerCod* Código
PerNom
Nombre
PerEmail Dirección de email
La forma de obtener todas las diferentes direcciones de
e-mail, sin duplicados, es:
For Each
Option
Distinct
&email =
PerEmail
Endfor
Para determinar el conjunto de valores distintos, se toman
en cuenta aquellos atributos referenciados en el For each.
Consideraciones generales
- La cláusula Option Distinct de los comandos For Each es soportada
para generadores Cliente/Servidor y no aplica a tablas
locales.
- Los For Each con Option Distinct no
pueden actualizar la base de datos. Tampoco los For Eachs interiores en el caso
de cortes de control. Los For Eachs anidados sobre otras tablas si pueden
realizar actualizaciones.
- Si no se
especifica un orden se asume Order None.
- La
cláusula Option Distinct se soporta en el For Each "exterior" en el caso de
cortes de control. Los For Eachs "interiores" heredan el Distinct.
- Los NULLs son considerados como cualquier
otro valor. Esto significa que si un atributo referenciado tiene valor NULL del
DBMS en mas de un registro, el For Each devolverá solamente uno de ellos.