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.