Service SQL IBM i (AS/400) · Fonction table
QSYS2.IFS_READ
Lire un fichier de flux de l'IFS
Lit un fichier de flux de l'IFS et renvoie son contenu ligne par ligne, avec un numéro de ligne, directement dans une requête SQL.
À quoi ça sert
La fonction de table lit le fichier désigné par PATH_NAME et renvoie deux colonnes : LINE_NUMBER et LINE. Le découpage en lignes se règle avec END_OF_LINE (défaut ANY, c'est-à-dire n'importe quel marqueur de fin de ligne reconnu) et MAXIMUM_LINE_LENGTH. Le contenu est converti dans le CCSID du travail. IGNORE_ERRORS vaut YES par défaut.
On l'utilise pour exploiter dans une requête un journal applicatif, un fichier de configuration, un export CSV ou JSON déposé dans l'IFS, sans passer par un programme de copie. Le résultat se filtre, se découpe avec des fonctions SQL et s'insère dans une table.
Pour écrire dans un fichier de flux, la procédure complémentaire est QSYS2.IFS_WRITE.
Résultat réel sur un IBM i 7.5
Ce que nous avons exécuté :
SELECT * FROM TABLE(QSYS2.IFS_READ(PATH_NAME => '/tmp/jobisql/bonjour.txt', END_OF_LINE => 'CRLF'))
Ce que l'IBM i a renvoyé le 01/10/2026 (2 lignes au plus) :
| LINE_NUMBER Numéro de ligne | LINE Ligne |
|---|---|
| 1 | Bonjour depuis job-i.fr |
| 2 | Deuxieme ligne du fichier |
Données anonymisées : les noms de système, de profils, de
bibliothèques, de postes et les adresses IP ont été remplacés. Les objets du schéma
JOBISQL sont des objets de démonstration créés pour ce site.
L'exemple d'IBM
Lire les données du fichier de flux /usr/file1, en coupant les lignes à chaque séquence retour chariot et saut de ligne ; le résultat est dans le CCSID du travail.
-- Description: Read the data from stream file /usr/file1. Break lines when a carriage
-- return/line feed sequence is encountered. The result will be in the job's CCSID.
SELECT * FROM TABLE(QSYS2.IFS_READ(PATH_NAME => '/usr/file1',
END_OF_LINE => 'CRLF'));
Bon à savoir
Pour un fichier très volumineux, ajoute un filtre sur LINE_NUMBER ou une clause FETCH FIRST pour ne pas tout parcourir.
Paramètres
| Paramètre | Type | Par défaut | Signification |
|---|---|---|---|
PATH_NAME |
DOUBLE-BYTE CHAR LARGE OBJECT | obligatoire | Chemin |
MAXIMUM_LINE_LENGTH |
INTEGER | 2147483647 | Longueur maximale d'une ligne |
END_OF_LINE |
VARCHAR(4) | 'ANY' | Caractère de fin de ligne |
IGNORE_ERRORS |
VARCHAR(3) | 'YES' | Ignorer les erreurs |
Colonnes renvoyées (2)
Afficher les 2 colonnes
| Colonne | Type | Signification |
|---|---|---|
LINE_NUMBER |
INTEGER | Numéro de ligne |
LINE |
CHAR LARGE OBJECT | Ligne |