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

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.

Print Friendly, PDF & Email