WHERE |
Wherepermet de sélectionner des enregistrements dans une table - en association avec un ordre d'ouverture de table, de parcours de table, d'un filtre ou d'un lien.
SYNTAXE 1
... Where expr_l...
SYNTAXE 2
... Wherekey id_clé [ '(' exp_ind ')' ] = liste_val ...
Elément | Description | Restrictions |
expression_logique. portant sur : |
| |
comparaison =, <, >, <=, >=, <> | Aucune. | |
Suivant type. | ||
left$, right$, mid$, seg$, len, num$,ctrans, tolower, toupper, val, ascii, chr$, instr, pat, string$, space$,mid$, vireblc. | Aucune. | |
abs, int, ar2, avg, var, prd. | Aucune. | |
aucune fonction n'est admise. | ||
find, max, min, sigma, uni. | Sauf type date. | |
nom_de_variable désignant une clé. | La clé doit exister | |
Expression entière du nombre de parties de clé utilisées. Par défaut, toute la clé est utilisée. | Le nombre d'expressions est au plus égal au nombre de sous-clés | |
liste d'expressions séparées par le caractère ";". | Les expressions sont de même type que la sous-clé |
# Déclaration du fichier des clients facturés réduit aux seuls clients francophones.
File CLIFACWhere
# Constitution d'un fichier des noms des répertoires unix présents
# dans mon répertoire d'accueil mais ne m'appartenant pas.
File (D,L,U,G,T,M,J,A,N) From System "ls -l"-getenv$("HOME")
& As [LSL]Where
# Lien des tables commandes clients et transporteurs réduit à celles
# passées à des transporteurs dont on gére le tarif.
Link COMCLI With [TAR]CODTRA = TRANSP As [LNK]Where [TAR]ATARIF = 2
# Filtre se rajoutant à la précédente sélection pour rechercher la
# prochaine commande d'un client mémorisé.
Filter [LNK]Where
# Parcours des lignes de commandes.
For [LCL]NUMLIG(1)
For [LCL]NUMLIG(2)
...
# Sélection des commandes d'un couple Client livré/Client facturé.
Filter [CCL] CLICCL(2) = toupper([M]CODCLIF);toupper([M]CODCLIL)
Wheres'emploie associé aux instructions File, Link, Filter, For ou Choose pour restreindre les enregistrements des tables mises en oeuvre par ces instructions en se limitant à ceux répondant à la condition passée en paramètre. Ceci permettant en plus d'accélérer les instructions portant sur un ensemble d'enregistrements telles For, Delete, Update etc.
Quand une clause Where s'applique à une table (ou un ensemble de tables) sur laquelle s'appliquait déjà une clause Where, la nouvelle vient renforcer la précédente. Tout se passe comme si on faisait un "et logique" entre les deux conditions.
Exception : une instruction Filter annule la précédente instruction Filter.
La condition est évaluée au moment de la déclaration et à ce moment là seulement, y compris pour une boucle For. Dans le cas de boucles For imbriquées, il ne peut y avoir qu'une seule clause Where.
Parmi les fonctions autorisées, certaines sont transmises à la base de données et sont donc directement exploitées par celle-ci. Il s'agit des fonctions suivantes :
left$, right$, mid$, seg$, abs, toupper, tolower, len,chr$,find, ctrans, pat
Les autres fonctions ne sont pas transmises à la base de donnée. Elles sont exploitées par le moteur Adonix; Ces fonctions sont à utiliser avec précaution, car il pourra y avoir des problèmes de performance.
Il ne faut pas utiliser les variables de la table en indice d'une variable dimensionnée sur laquelle porterait la sélection. Même si la syntaxe est acceptée.
Exemple :
Filter [CCL] Where [L]CATEG([F:CCL]TYPCOM) = 1
# donne une erreur à l'exécution.
Clause Where et constantes
si un critère de la clause Where contient un test de constante faux, cela signifie qu'on n'appliquera aucun des critères. Dans l'exemple, tout le fichier est lu.
Filter [ITM]Where 1=0 &[F:ITM]ITMREF="CD100"
Clause Where et champ d'une autre table
si un critère de la clause Where contient un champ d'une autre table, cela signifie qu'on n'appliquera aucun des critères. Dans l'exemple, tout le fichier est lu.
Filter [ITM]Where[F:ITV]ITMREF="CD100" & [F:ITM]ITMREF="CD100"
Clause Where et fonction pat()
La fonction pat() n'est transmise à la base de donnée que si elle est employée comme fonction numérique et non logique :
- formule déconseillée ( car non transmise à la base et donc moins performante )
Filter [F]
- formule recommandée
Filter [F]Where pat(x,"A*")<>0
Clause Where et fonction non suportée
Certaines fonctions ne sont pas supportées dans la clause where. Il s'agit desfonctions suivantes :
- sigma
Clause Where et fonction ayant pour paramètre des fonctions dont le résultat n'est pas une constante.
ex: find(...num$([F:STJ]ENTCOD)...))
Quand on rencontre ce genre d'expression, la deuxième fonction est considéréecomme constante et évaluée qu'une seule et unique fois.
ERPAFON(4) | Fonctionnon autorisée (1ère syntaxe). |
PACLE(21) | Cléinexistante (2ème syntaxe). |
ERMODE(10) | Typed'expression incompatible avec celui de la partie de clé (2ème syntaxe). |
Adonix X3® L4G |