Il est possible d'utiliser des instructions SQL dans les modèles de traitement batch ou interactif.
Chaque bloc d'instructions est délimité par des ordres L4G Adélia de début et de fin (DEBUT_SQL et FIN_SQL).
Entre ces deux ordres, sont spécifiées les lignes correspondant à une instruction SQL et une seule. Ces lignes commencent toujours par le caractère +.
Les instructions Adélia sont les suivantes :
DEBUT_SQL |
Début du mode de travail sous SQL. |
+ requête SQL |
|
+ requête SQL |
Requête SQL conforme à la syntaxe SQL. |
+ requête SQL |
|
FIN_SQL |
Fin du mode de travail sous SQL. |
Par exemple
DEBUT_SQL
+ DECLARE EMPLOYES CURSOR FOR
+ SELECT PCOSTE, PCOMAT, PMTSAL
+ FROM HP£PERP
+ WHERE PCOSER = :WCOSER
FIN_SQL
Chaque ligne de requête SQL commence par le caractère +.
La syntaxe du langage SQL n'est pas vérifiée par le système Adélia. Il faut se conformer à celle demandée par le produit SQL.
L'exploitation consécutive à l'exécution de la requête est alors à la charge du modèle qui est construit.
Par exemple
Soit un programme batch de calcul d'augmentation des salaires au sein du fichier du personnel (EMPLOYES).
RECEVOIR WCOSER PTOAUG |
: initialisation du programme |
WTOAUG = PTOAUG |
: |
* |
: |
DEBUT_SQL |
: constitution de la lecture PAR SQL |
+ DECLARE EMPLOYES CURSOR FOR |
: déclaration d'un fichier de travail |
+ SELECT PCOSTE,PCOMAT,PMTSAL |
: nommé EMPLOYES, sélection des zones |
+ FROM HP£PERP |
: PCOSTE, PCOMAT, PMTSAL au sein du |
+ WHERE PCOSER = :WCOSER |
: fichier HP£PERP, lorsque PCOSER est |
FIN_SQL |
: égal au paramètre reçu WCOSER |
* |
: ( :WCOSER est appelé variable hôte |
* |
: dans le langage SQL) |
* |
: |
DEBUT_SQL |
: |
+ OPEN EMPLOYES |
: OUVERTURE du fichier de travail EMPLOYES |
FIN_SQL |
: |
* |
: |
DEBUT_SQL |
: |
+ FETCH EMPLOYES |
: lecture de début de boucle |
+ INTO :Z_CODE_SOCIETE , :Z_CODE_MATRICUL , :Z_MONTANT_SALAI |
|
|
: et chargement de variables hôtes |
FIN_SQL |
: (Variables du modèle) |
* |
: ADELIA vérifie que les variables |
* |
: hôtes existent. |
* |
: |
TANT_QUE *SQLCODE <> 100 |
: *SQLCODE est un mot réservé ADELIA |
* |
: qui récupère un code de travail généré par SQL |
* |
: Ce code s'appelle SQLCOD dans SQL. |
|
: La valeur 100 |
* |
: indique la fin de lecture |
Z_MONTANT_SALAI = Z_MONTANT_SALAI + Z_MONTANT_SALAI * (WTOAUG / 100) |
|
DEBUT_SQL |
: |
+ UPDATE HP£PERP |
: mise à jour par SQL du montant de |
+ SET PMTSAL = :Z_MONTANT_SALAI |
: salaire par la variable hôte ZMTSAL |
+ WHERE CURRENT OF EMPLOYES |
: lorsque la clé de HP£PERP |
FIN_SQL |
: correspond aux zones ZCOSTE et |
* |
: ZCOMAT du fichier EMPLOYES |
* |
: |
DEBUT_SQL |
: |
+ FETCH EMPLOYES |
: relecture |
+ INTO :Z_CODE_SOCIETE , :Z_CODE_MATRICUL , :Z_MONTANT_SALAI |
|
FIN_SQL |
: |
* |
: |
REFAIRE |
|
|
: |
DEBUT_SQL |
: |
+ CLOSE EMPLOYES |
: FERMETURE du fichier EMPLOYES |
FIN_SQL |
: |
Toute la gestion de ce modèle est faite par SQL.
La structure algorithmique est donnée par l'analyse du travail à effectuer.
Chaque instruction SQL est délimitée par les ordres L4G DEBUT_SQL et FIN_SQL.