2017-07-10 1 views

Répondre

6

Vous recherchez le numéro d'enregistrement relatif (RRN?)

Position 397 de la structure de données Informations sur le fichier (INFDS).

l'exemple de la manual

DCL-F MYFILE DISK(*EXT) INFDS(DBFBK); 

DCL-DS DBFBK; 
    FDBK_SIZE INT(10) POS(367); // Current line num 
    JOIN_BITS INT(10) POS(371); // JFILE bits 
    LOCK_RCDS INT(5) POS(377); // Nbr locked rcds 
    POS_BITS CHAR(1) POS(385); // File pos bits 
    DLT_BITS CHAR(1) POS(384); // Rcd deleted bits 
    NUM_KEYS INT(5) POS(387); // Num keys (bin) 
    KEY_LEN INT(5) POS(393); // Key length 
    MBR_NUM INT(5) POS(395); // Member number 
    DB_RRN INT(10) POS(397); // Relative-rcd-num 
    KEY CHAR(2000) POS(401); // Key value (max size 2000) 
END-DS; 
1

ouvrir le fichier avec l'option InfDs(InfDSk) et InfDSk définie par:

dcl-ds InfDSk qualified ; 
    RRN uns(10) pos(397) ; 
end-ds ; 

Le numéro d'enregistrement RRN (ou recno) est disponible avec: InfDSk.RRN

Au lieu d'utiliser RRN, dans un fichier avec accès par clé, je préfère CHAIN ​​à une structure de données spécifique et j'écris la DS par la suite ...

+0

Vous réalisez que vous pouvez utiliser un RRN avec ou sans infrastructure de données. Le RRN est utilisé pour choisir un enregistrement spécifique comme une clé dans un fichier d'accès par clé. Cela n'a rien à voir avec l'endroit où les données récupérées sont stockées (structure de données ou non). – jmarkmurphy

+0

L'exemple ci-dessus obtient-il les 10 positions complètes ou seulement les 4 premiers octets (64 Ko)? – danny117

+0

La valeur non signée sur 4 ou 10 chiffres dans les positions 397-400 de l'INFDS peut avoir une valeur jusqu'à 4 294 967 295. –

-1

Obtenez les 10 chiffres complets de RRN avec SQL.

exec sql declare x1 cursor for select rrn(a) rn, a.* from myfile/mlib a; 

exec sql open x1; 

exec sql fetch next from x1 into :myds; 

DANGER méthodes de structure de données retourne seulement quatre octets 397-400 fichiers physiques avec plus de 64k dossiers ne fonctionnent pas.

Sur les versions précédentes avant les types de données entiers, nous sommes utilisés.

+0

L'entier de 4 octets retourné dans le DS ** est ** 10 chiffres ... peut avoir une valeur de 4 294 967 295. – Charles

+0

Même si vous assumez l'ancien type de données binaires, ils prennent en charge 9 chiffres, ce qui vous permet d'indexer 999 999 999 enregistrements et non 64 Ko. – jmarkmurphy

+0

Je sais juste à un endroit où j'étais à chaque fois que les commandes étaient plus de 65k en un jour il y avait un problème. Peut-être que le DS a été défini incorrectement. C'était le code RPG II. – danny117