Accueil du site > Les articles > Remplacer une partie de chaîne de caractère avec SQL
Version à imprimer Enregistrer au format PDF

Remplacer une partie de chaîne de caractère avec SQL

mardi 29 mai 2007, par David Malle Visites  8592

Remplacer un libellé par un autre dans tous les enregistrements d’un fichier, avec SQL. C’est assez facile, et cela peut servir pour offrire des possibilités de paramétrage plus ou moins complexe aux utilisateurs.


La requête SQL

UPDATE QTEMP/TMPDUCLIB                                    
SET LGNLIB =                                              
CAST(                                                    
SUBSTR(LGNLIB, 1,                                        
       LOCATE(TRIM( :WMOT ), LGNLIB) -1 )                
CONCAT TRIM ( :WVAL )                                    
CONCAT SUBSTR(LGNLIB,                                    
              LOCATE(TRIM( :WMOT ), LGNLIB)              
                + LENGTH(TRIM( :WMOT )) ,                
              LENGTH(LGNLIB) - (                        
                LOCATE(TRIM( :WMOT ), LGNLIB)            
                + LENGTH(TRIM( :WMOT )) -1 ))            
AS CHAR(200))                                            
WHERE LGNLIB LIKE                                        
'%' CONCAT TRIM( :WMOT ) CONCAT '%'                      

Explication

- La variable WMOT contient la valeur de la chaîne de caractère à remplacer.
- La variable WVAL contient la valeur de remplacement.
- Dans l’exemple, le remplacement se fait sur un fichier qui contient une zone LGNLIB de 200 caractères de long. Il s’agit de libellés à imprimer.
- Lorsque la requête est lancée avec par exemple WMOT = "#DATE#" et WVAL = "010507", tous les enregistrements contenant #DATE# sont modifiés avec la valeur 010507.

Utilisation

J’utilise souvent ce système pour permettre aux utilisateurs de paramétrer certaines choses comme des libellés à éditer où viennent s’insérer des valeurs variables lors des traitements.

Exemples

L’utilisateur saisit dans son fichier de libellés à éditer :

Date limite de dépôt de la déclaration le : #DATE_DCL#
Cotisations à régler au plus tard le      : #DATE_COT#
Salaire versé le                          : #DATE_VER#

Le traitement appel autant de fois que de variables possibles la requêtes SQL que l’on a mis dans une procédure, en affectant avant WMOT et WVAL avec les valeurs adéquates :

WMOT = "#DATE_DCL#"
WVAL = "01/05/2007"
Appel de la requête SQL

WMOT = "#DATE_COT#"
WVAL = "05/05/2007"
Appel de la requête SQL

WMOT = "#DATE_VER#"
WVAL = "05/05/2007"
Appel de la requête SQL

Vous faite autant d’appel que de variables prévues dans votre fonctionnel. Si l’utilisateur ne les utilise pas dans son paramétrage, pas d’impact dans vos programmes.

Astuce

essayer de mettre un mot clé de la même taille que vos variables de remplacement (#DATE_DCL# fait 10 de long, comme la date 01/05/2007), ceci pour faciliter les cadrages.

Parfois, en 5250, on souhaite maîtriser le positionnement des libellés à des endroits fixes de la ligne.

Première partie #DA# seconde partie ICI commence la partie fixe

Donnera

Première partie 01/02/2007 seconde partie ICI commence la partie fixe

Alors que

Première partie #DAT_DECL# seconde partie ICI commence la partie fixe

Donnera

Première partie 01/02/2007 seconde partie ICI commence la partie fixe

Soit pile poil la même taille de libellé.

Je trouve la méthode pratique