Recherche sur le blog

mardi 13 novembre 2012

[SQL] Connaitre le RRN sur DB2/400

En SQL, il est possible de connaitre le numéro de ligne grâce à la fonction “Rownumber Over()”. Cependant, elle renvoie la position de l’enregistrement dans l’ensemble de données récupérées, alors que ce que nous souhaitons c’est retrouver le numéro relatif que la base de données lui a attribué lors de l’insertion. On peut même trier sur celui-ci pour obtenir les données dans leur ordre réel d’ajout. 

Syntaxe
SELECT RRN(alias1) AS rownum, ...
FROM ma_table AS alias1
WHERE ...
La table dont on veut récupérer le “numéro d’enregistrement relatif”, ou en anglais le “relative record number”, peut bien sûr faire partie d’une jointure. Attention également si vous utilisez des bases de données distribuées (plusieurs parties sur des sites différents et géographiquement distants). La note ci-dessous est à prendre en compte:
The RRN function returns the relative record number of the row stored on a node in a distributed file. This means that RRN is not unique for a distributed file. A unique record in the file is specified if you combine RRN with either NODENAME or NODENUMBER.