Order By permet de fixer l'index de parcourt d'une table, voire de créer un nouvel index.
SYNTAXE 1
... Order By Key id_clé ['('exp_ind')'] [ Asc | Desc ] ...
SYNTAXE 2
... Order By Key id_clé = liste_expr_clé ...
SYNTAXE 3
... Order Byliste_expr_clé ...
SYNTAXE 4
... Order With Key id_clé = chaîne_clé ...
SYNTAXE 5
... Order With chaîne_clé ...
Elément | Description | Restrictions |
id_clé | nom_de_variable désignant la clé. | La clé doit exister (syntaxe 1) |
exp_ind | Expression entière du nombre de parties de clés utilisées. Par défaut, toute la clé est utilisée. | 0 <=exp_ind<= nombre de composantes de la clé (au plus 8). |
liste_expr_clé | Liste de expr_clé séparés par ';' | Au plus 16 sous-clés |
chaîne_clé | Expression de type Char dont le résultat est une liste de expr_clé séparés par ';' | Au plus 16 sous-clés |
expr_clé | Nom des sous-clés exprimées sous l'une des formes suivantes : |
|
sous_clé | expression portant sur | Aucune Suivant opérateur ou fonction ( voir Where ) |
# Choix d'un enregistrement dans le fichier d'abréviation ENG, parmi
# ceux répondant au critére saisie et triés dans l'ordre descendant de
# la première partie de la clé NUMENG.
Choose [ENG] Where evalue(CRITERE) Order By NUMENG(1) Desc Mask [SEN]
# Lien entre le fichier des stocks (d'abrévation STK) et celui des
# articles (d'abréviation PRO) trié par "CASIER" puis par "ARTICLE".
Link [STK] With [F:PRO]CODPRO = [F:STK]ARTICLE As [LSTK]
& Order By Key CLE = CASIER; ARTICLE
# Parcours du fichier d'abréviation TFI suivant le RANG et le NOM
Filter [TFI] Where SPECIF = 3 & RANG > 0
& Order By RANG Asc; NOM Asc
For [TFI] : Call COPIE([F:TFI]NOM) : Next
Filter [TFI]
# La même chose que les 2 exemples précédent, mais écrit avec une chaîne de caractères
Link [STK] With [F:PRO]CODPRO = [F:STK]ARTICLE As [LSTK]
& Order WithKey CLE = "CASIER; ARTICLE"
# La même chose que les 2 exemples précédent, mais écrit avec une chaîne de caractères
Filter [TFI] Where SPECIF = 3 & RANG > 0
& Order With"RANG Asc; NOM Asc"
Order By s'emploie avec les instructions File, Link, Filter et Choose pour fixer la clé de parcours d'une table ( ou d'un ensemble de tables, dans le cas d'un ordre Link ) ou encore pour créer une nouvelle clé. Elle est interdite sur les fichiers de type System.
Cette clé devient la seule connue pour cette table et masque alors toutes les autres jusqu'à la prochaine clause Order By.
On utilise Order With à la place de Order By lorsque la liste des éléments constituants le tri est contenu dans une chaîne de caractères.
Déclaration d'une nouvelle clé
- Une nouvelle clé sera créée avec les syntaxes 2, 3, 4 et 5. En utilisant la 3ème ou 5 ème syntaxe, aucun nom n'est donné à la clé, ce qui est acceptable par la plupart des ordres de lectures/écritures.
- Une nouvelle clé sera toujours du type 'Avec Homonymes'.
- Les clés sont limitées à 8 parties et leur taille à 128 octets.
- Le nombre de clé est limité à 32 par table. Les nouvelles clés créées par Order by viennent s'ajouter à celles définies en paramètrage. En faisant la succession d'instructions suivantes :
File FICH ... Order by ...
Filter [FICH] ... Order by ...
Choose [Fich] ... Order by ... , on arrive à créer 3 clés supplémentaires.
- Par défaut, le parcours se fera dans le sens ascendant de chaque partie de clé à moins que la clause Desc ( pour descendant ) n'ai été précisée. Quand on applique Desc à une clé pré-existante (syntaxe 1), on change le "sens" de chaque partie de la clé : les parties définies comme ascendantes deviennent descendantes et inversement.
- La déclaration d'une clé supplémentaire est couteuse en temps, quelque soit le type de la base. Et ceci d'autant plus que le nombre d'enregistrements mises en cause est grand. Il sera donc judicieux de :
On peut utiliser directement des champs du fichier ou s'en servir pour calculer des expressions. Dans ce cas les fonctions numériques et alphanumériques sont limitées comme pour la clause Where.
En précisant l'indice de clé (syntaxe 1) on peut limiter les enregistrements à ceux faisant changer cette partie de clé, ce qui permet d'ignorer les homonymes. Cette possibilité est donc particulièrement intéressante avec l'ordre Choose.
Si on a créé une nouvelle clé (syntaxe 2), on ne pourra pas l'utiliser pour la redéfinir. Exemple :
File FIC1 [FIC1] Order By Key NEW = ALPHA; DCB ... puis Filter [FIC1] Order By Key NEW Desc fera une erreur "NEW : Clé inexistante dans cette table" à l'exécution.
Les fichiers temporaires créés lors de la définition d'une nouvelle clé sur une table C-isam sont stockés dans le répertoire /tmp, à moins que la variable d'environnement TMPDIR ne comporte le nom d'un autre répertoire. Il n'est pas possible de les modifier; ils sont accessibles uniquement par le processus courant et sont supprimés physiquement à la fin de de leur utilisation ou à la fin du processus.
Ils utilisent deux canaux Unix supplémentaires (ces canaux ne sont pas comptabilisés dans [S]adxmso ).
La clause Order By masquant toutes les clés sauf une, certaines variables de la classe [G] associées à la table sont changées suivant le tableau ci-dessous.
Nom | Dimension | Valeur |
currind | (0) inchangée | 1 |
keylen | (0) | recalculée |
keyname | (0) | (syntaxe 3) |
keyuniq | (0) | 0 |
nbind | (0) inchangée | 1 |
Dans le cas d'un ensemble de tables liées par l'instruction Link, seule la classe [G] associée à cet ensemble est affectée; les clés des tables continuent à être utilisables.
L'instruction Sorta qui permet de trier des variables, utilise aussi Order By mais avec de toute autres spécifications.