Agrégation de données avec LISTAGG

SELECT item ,LISTAGG(TRIM(couleur), ‘,’) WITHIN GROUP(ORDER BY couleur)AS couleursFROM articleGROUP BY item Explications :LISTAGG permet de lister dans une colonne les données issues de plusieurs lignes.LISTAGG(colonne_à_concaténer , ‘séparateur’) WITHIN GROUP(ORDER BY colonne_de_tri) Dans l’exemple donné, le SQL transforme le fichier article suivant en 2 lignes composées de la colonne item et d’une colonne de couleurs … Lire la suite

Faire du ménage dans l’IFS selon la date des fichiers

Par exemple, supprimer tous les fichiers pdf de plus d’1 an dans un répertoire : SELECT QCMDEXC(‘rmvlnk objlnk( »’ CONCAT TRIM(CAST(path_name AS VARCHAR(200))) CONCAT  »’)’) FROM TABLE(qsys2.ifs_object_statistics( ‘/home/monRepertoire’)) WHERE path_name LIKE ‘%.pdf’ AND CREATE_TIMESTAMP < CURRENT_TIMESTAMP – 1 YEARS Explications :– ifs_object_statistics permet de lister les fichiers d’un répertoire de l’IFS exemple : SELECT CAST(path_name AS … Lire la suite

Trouver le programme appelant dans un RPG

Permet dans un RPG d’identifier son programme appelant. Cela peut servir par exemple pour conditionner certaines actions ou laisser une trace dans un fichier log. en SQLRPGLE :dcl-ds N PSDS; nom_du_pgm CHAR(10) POS(1);end-ds; dcl-s appelant char(10); EXEC SQL SELECT program_name INTO :appelant FROM TABLE(stack_info(‘*’)) WHERE program_name not in (‘ ‘ , :nom_du_pgm) AND ordinal_position < … Lire la suite

Supprimer les doublons dans un fichier

DELETE FROM monfichier aWHERE RRN(a) NOT IN ( SELECT MAX(RRN(b)) FROM monfichier b WHERE (a.cle1, a.cle2) = (b.cle1, b.cle2) ) Explications :La fonction RRN permet de récupérer le numéro d’enregistrement de la ligne. Le SQL supprime donc les doublons (clé1+clé2 dans l’exemple) qui ne correspondent pas au dernier numéro d’enregistrement. Si on veut conserver le … Lire la suite

Trouver le numéro du jour de la semaine sans calendrier

Permet d’affecter à la variable jour le numéro du jour de la semaine du jour comme suit :1:Lundi 2:Mardi 3:Mercredi 4:Jeudi 5:Vendredi 6:Samedi 7:Dimanche(et sans s’appuyer sur un calendrier!) en SQLRPGLE :EXEC SQL SET :jour= (CASE WHEN DAYOFWEEK(CURRENT_DATE) = 1 THEN 7 ELSE DAYOFWEEK(CURRENT_DATE)-1 END); Explications : la fonction SQL DAYOFWEEK permet de récupérer le … Lire la suite