L4G >  Order  

Afficher tout Masquer tout

Order By permet de fixer l'index de parcourt d'une table, voire de créer un nouvel index.

 

Syntaxe

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

 

 

Paramètres

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é [ Asc ]
sous_clé Desc

 

sous_clé

expression portant sur
- des variables quelconques
- des champs du fichier

Aucune Suivant opérateur ou fonction ( voir Where )

 

Exemples

   # 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"

 

Description

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 :

  • limiter cet usage au strict nécessaire.
  • limiter le nombre d'enregistrements par l'utilisation d'une clause Where.
  • prévoir suffisamment de place pour les fichiers de tri dans le répertoire qui leur sera réservé dans le cas d'une base C-isam. Il faut en effet 4 octets par enregistrements à trier.

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.

 

Remarques

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.

 

Erreurs associées

Erreur

Description

PACLE (21)

Clé inexistante (OrderBy : 1ère syntaxe).

ERDIM (55)

Longueur de clé redéfinie par "OrderBy ..." > 128

 

Mots-clés associés

FILE - LINK - FILTER - CHOOSE - WHERE - CURRIND - ADXMTO