> Tech > Le mot-clé Clob_Locator

Le mot-clé Clob_Locator

Tech - Par Renaud ROSSET - Publié le 24 juin 2010
email

Quand on doit travailler avec des valeurs dépassant 64 Ko, on peut déclarer une variable locator, comme illustré en C. On utilise alors une carte D sans type ou longueur de donnée et on spécifie le mot-clé SqlType(Clob_Locator). On n'indique pas de longueur pour SqlType quand on utilise Clob_Locator. Le

précompilateur
SQL/400 commente la carte D d’origine et en génère une comme celle-ci :

DCLOB1LOC 10U 0

Notons que la variable générée a le même nom et est un entier positif. Quand on
extrait une colonne CLOB dans une variable locator, comme illustré en G (voir
la ligne avec la variable hôte :Clob1Loc), le runtime SQL/400 place un pointeur
dans la variable hôte. Ce pointeur fait référence à  une chaîne statique à  laquelle
on peut accéder avec d’autres instructions SQL. On ne peut pas utiliser des opérations
RPG IV sur des caractères ou des chaînes avec une variable locator.

Mais on peut utiliser la variable locator dans des opérations sur les chaînes
SQL/400. L’une des façons les plus simples d’utiliser un locator se trouve dans
une fonction Left ou SubStr, comme illustré en H. Dans l’instruction

Set :Char2Var =
Left( :Clob1Loc, Length( :Clob1Loc ) )

L’utilisation d’un locator mérite quelques précisions

le résultat de la sous-chaîne Left est placé dans Char2Var, qui est déclaré (en
A) comme une variable caractère RPG IV de longueur variable. La variable locator
Clob1Loc est utilisée deux fois dans l’expression, une fois comme argument chaîne
pour la fonction Left et une fois comme argument chaîne pour la fonction Length.
Dans des fonctions SQL/400, on peut définir un locator partout où une chaîne est
autorisée. Dans cet exemple, Clob1Loc pointe sur la valeur Clob1 entière et toute
la chaîne est attribuée à  Char2Var.

Bien sûr, on ne peut toujours pas attribuer une valeur dépassant 64 Ko à  une variable
RPG, mais on peut utiliser une code pour accéder à  une partie d’une valeur CLOB.
En I, par exemple, une instruction SQL Set extrait la longueur de la valeur de
colonne Clob1 et la place dans la variable hôte Clob1Len. En J, les variables
hôtes sont calculées pour la position de départ et la longueur d’une sous-chaîne.
On peut calculer les valeurs appropriées pour une application donnée : il faut
simplement que la position de départ soit supérieure à  zéro et qu’elle ne dépasse
pas la longueur de la valeur de colonne.

De plus, la longueur de la sous-chaîne ne doit pas dépasser la taille de la variable
hôte (Char3Var, par exemple). En K, une fonction SQL SubStr utilise le locator,
la position de départ et la longueur, pour extraire une partie de la valeur de
colonne Clob1 et la placer dans la variable hôte Char3Var. Le code tiré de cet
exemple peut être placé dans une boucle, pour traiter la totalité d’une grande
valeur CLOB, une partie à  la fois.

L’utilisation d’un locator mérite quelques précisions. Le locator fait référence
à  une chaîne immuable. Une fois un locator extrait, aucune modification de la
base de données n’apparaît dans la chaîne référencée. Pour utiliser un locator,
il faut utiliser un contrôle de validation ; autrement dit, on ne peut pas définir
Commit(*None) quand on crée le programme. Un locator n’est valide que jusqu’à 
la fin d’une transaction (par l’exécution d’une instruction Commit ou Rollback,
par exemple), ou jusqu’à  ce qu’on libère explicitement le locator avec une instruction
SQL Free Locator comme celle qui apparaît en L.

Téléchargez cette ressource

Guide inmac wstore pour l’équipement IT de l’entreprise

Guide inmac wstore pour l’équipement IT de l’entreprise

Découvrez toutes nos actualités à travers des interviews, avis, conseils d'experts, témoignages clients, ainsi que les dernières tendances et solutions IT autour de nos 4 univers produits : Poste de travail, Affichage et Collaboration, Impression et Infrastructure.

Tech - Par Renaud ROSSET - Publié le 24 juin 2010