Accueil du site > Les articles > Exécuter une requête SQL stockées sur l’IFS via QSH et la commande (...)
Version à imprimer Enregistrer au format PDF

Exécuter une requête SQL stockées sur l’IFS via QSH et la commande db2

mardi 15 mai 2007, par David Malle Visites  4372

Il est possible d’exécuter des requêtes SQL stockées sur l’IFS dans un fichier texte. C’est une solution souple pour lancer facilement et régulièrement des requêtes sur une base db2 AS400.


Requête SQL pour l’exemple

Supprimer les enregistrements d’un fichier myfic en date de création DATECR de plus de 6 mois.

Créer la requête dans un fichier texte de l’IFS

Créer un fichier texte delete_01.txt sur l’IFS dans le répertoire /home/repifs/delete_01.txt contenant la rquête suivante :

delete from myfic a where a.datecr < (year(current date - 6 month) * 10000 + month(current date - 6 month) * 100 + day(current date - 6 month));

Attention : pas de saut de ligne dans la saisie d’une requête.

Exécuter la requête à partir de l’AS400, en ligne de commande QSH

- tapez qsh + enter pour avoir la console qsh
- tapez la commande

   db2 -f /home/repifs/delete_01.txt bibi5

- F3 pour sortir de la console qsh

La valeur bibi5 représente la bibliothèque AS400 sur laquelle la commande SQL db2 stockée dans le fichier texte doit s’exécuter.

Exécuter la requête à partir de l’AS400, via la commande QSH

- tapez la commande

   QSH CMD('db2 -f /home/repifs/delete_01.txt bibi5')

- entrée pour sortir de la console qsh

Exécuter la requête à partir de l’AS400, via la commande QSH et obtenir le résultat dans un fichier texte sur l’IFS

- pratique pour obtenir le résultat d’un select sous forme de fichier texte.
- créez un fichier texte avant avec le bon ccsid, pour la conversion automatique des données affichées.
- tapez la commande

   QSH CMD('db2 -f /home/repifs/select_01.txt bibi5 >> /home/repifs/resultat.txt')

Automatisation

Ce n’est pas pratique de débrancher systématiquement sur la console QSH. Alors désactivez la :
- Tapez la commande

   ADDENVVAR  ENVVAR(QIBM_QSH_CMD_OUTPUT) VALUE('NONE')}}

- tapez la commande

   QSH CMD('db2 -f /home/repifs/delete_01.txt bibdme')

La commande s’exécute, sans que la console s’affiche. Pratique.

Plusieurs requêtes dans un même fichier texte.

Vous pouvez enchaîner plusieurs requêtes dans un même fichier texte. Modifiez votre fichier pour ajouter une seconde requête (mon exemple est idiot, vous le constatez vous même, mais bon ...c’est pour l’exemple) :

delete from myfic a where a.datecr < (year(current date - 6 month) * 10000 + month(current date - 6 month) * 100 + day(current date - 6 month));
delete from myfic a where a.datecr < (year(current date - 5 month) * 10000 + month(current date - 5 month) * 100 + day(current date - 5 month));

Attention : un saut de ligne entre chaque requête.