Accueil du site > Les articles > SQL dynamique, marquer l’emplacement d’une variable par un " ?"
Version à imprimer Enregistrer au format PDF

SQL dynamique, marquer l’emplacement d’une variable par un " ?"

vendredi 29 avril 2005, par David Malle Visites  26671

Cet article décrit brièvement comment utiliser un caractère " ?" pour désigner l’emplacement d’une variable dans une requête SQL.


Le caractère " ?" dans les requêtes SQL dynamiques

Dans l’exemple suivant, cela nous permet de rendre dynamique une requête de supression :

- Lors du stockage de la requête de supression, un " ?" est utilisé pour désigner l’emplacement de la variable qui servira à la condition de supression.
- Préparation du curseur
- Stockage dans la variable SValeur, de la valeur de filtrage pour la colonne C1, pour supression des enregistrement de la table T1. Par exemple on stocke ’1’ dans SValeur, si l’on souhaite supprimer les enregistrements de la table T1 dont la colonne C1 contient la valeure ’1’. On peut évidemment récupérer cette valeur via une saisie utilisateur.
- Execution de la requête via instructions Execute et Using qui permet d’indiquer le nom de la variable hôte à utiliser pour alimenter le paramètre de la clause where.
- Vous pouvez utiliser plusieurs caractères ’ ?’ dans votre clause. Il vous suffit de passer autant de variables hôtes dans votre instruction using et ceci dans le même ordre que vous caractères ’ ?’.

D SValeur         S              1A
D SRequete        S            256A
C                   Eval      SRequete   = 'Delete From T1 +
C                                           Where C1 = ?'
C/Exec SQL
C+                  Prepare DCurseur
C+                    From :SRequete
C/End-Exec
C                   If        ( SQLCod = 0 ) And ( SQLWn0 = *BLANK )
C                   Eval      SValeur    = '1'
C/Exec SQL
C+                    Execute DCurseur
C+                      Using :SValeur
C/End-Exec
C                     If      ( SQLCod <> 0 ) Or ( SQLWn0 <> *BLANK )
C                       ExSr  SQLError
C                     EndIf
C                   Else
C                     ExSr    SQLError
C                   EndIf