WHERE

Sommaire


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

   SYNTAXE 1
   ... Where expr_l...

   SYNTAXE 2
   ... Wherekey id_clé [ '(' exp_ind ')' ] = liste_val ...

 

Paramètres

Elément

Description

Restrictions

expr_l

expression_logique. portant sur :
- des variables quelconques
- des zones du fichier.


Aucune.
Suivant opérateurs ou fonctions.

opérateurs

comparaison =, <, >, <=, >=, <>
arithmétique +, -, *, /, ^
logique and, or, not, xor.

Aucune.
Sauf "-" sur chaine
Aucune .

fonctions

Alphanumériques,numériques,etc...

Suivant type.

Alphanumérique

left$, right$, mid$, seg$, len, num$,ctrans, tolower, toupper, val, ascii, chr$, instr, pat, string$, space$,mid$, vireblc.

Aucune.

numérique

abs, int, ar2, avg, var, prd.

Aucune.

date

aucune fonction n'est admise.

spacer.gif (822 octets)

multi-type

find, max, min, sigma, uni.

Sauf type date.

id_clé

nom_de_variable désignant une clé.

La clé doit exister

exp_ind

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_val

liste d'expressions séparées par le caractère ";".

Les expressions sont de même type que la sous-clé

 

Exemples

   # Déclaration du fichier des clients facturés réduit aux seuls clients francophones.
    File CLIFACWhere CODLANG = 1

   # 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 P <> getenv$("LOGNAME") and left$(D,1) ="d"

   # 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 CODCLIF = [L]CLICUR and NUMCCL > [L]NUMCUR

   # Parcours des lignes de commandes.
    For [LCL]NUMLIG(1)Where NUMCCL = [CCL]NUMCCL
       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)

 

Description et commentaires

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.

 

Remarques

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]Wherepat(x,"A*")
- 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.

Erreurs associées

Erreur

Description

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).

 

Mots-clés associés

FILE - LINK - FILTER - FOR - CHOOSE - DELETE- UPDATE- ORDER


SOMMAIRE

Adonix X3® L4G
Copyright © Adonix 1999 - All rights reserved