Les séquences sont plus fiables que tout mécanisme applicatif pour ce qui est d'éviter les affectations de NUDOSS en double (saisie TP importante, Mises à jours batch de reprise en parallèle).
Exemple de séquence
Création sous SQL :SQL> create sequence HR.MYSEQUENCE start with 1 increment by 1 maxvalue 9 minvalue 1 cache 2 cycle order;
SQL> select mysequence.nextval from dual;
1
Explicitation des options :
- cycle : pour revenir automatiquement à MINVALUE si MAXVALUE est atteint,
- cache : nombre d'identifiants conservés en mémoire par Oracle (minimum 2),
- order : obtenir que les identifiants soient fournis obligatoirement dans l'ordre,
Les pseudocolonnes CURRVAL et NEXTVAL pemettent d'obtenir l'identifiant en cours ou le suivant :
SQL> select mysequence.currval from dual;
1
SQL> select mysequence.nextval from dual;
2
...
SQL> select mysequence.nextval from dual;
8
SQL> select mysequence.nextval from dual;
9
SQL> select mysequence.nextval from dual;
1
Destruction :
SQL> drop sequence HR.MYSEQUENCE;
Création de la séquence NUDOSS pour ZO
SQL> create sequence HR.NEW_NUDOSS_FOR_ZO start with 1 increment by 1 maxvalue 999999999 minvalue 1 cache 2 cycle order;Création du traitement BNK contexte TBP051
Ce contexte de BNK est dédié à l'attribution de NUDOSS.Contexte de Variables TBW003 du traitement XY-ZONUDO
---------------------------------------- Variables AA --------------
010 * HOST-VARIABLES
020 * --------------
030 * <DEBSEC>SO
040 01 H-MYNBDOSS PICTURE 9(02).
050 01 H-MYNUDOSS PICTURE 9(09).
060 * <FINSEC>SO
070 01 U-MYNUDOSS-FOUND PICTURE 9(01).
Contexte de Procédures TBP033 du traitement XY-ZONUDO
---------------------------------------------------- Fonction BB -------------
010 N AFFECTATION NUDOSS ZO 10 BL
020 *
030 * UTILISATION DE LA SEQUENCE
040 * HR.NEW_NUDOSS_FOR_ZO
045 * ET LECTURE DE ZO00
050 M ZERO U-MYNUDOSS-FOUND
---------------------------------------------------- Fonction BF -------------
010 N BOUCLE DE REHERCHE NUDOSS LIBRE 20 DW U-MYNUDOSS-FOUND = ZERO
020 *
030 * SELECT NEXTVAL -----------------
040 * <DEBSUB>RDTCOM
050 EXQ SELECT
060 %1.NEW_NUDOSS_FOR_ZO.NEXTVAL
070 INTO :H-MYNUDOSS
080 FROM DUAL
090 * <FINSUB>
092 COB DISPLAY "<DIGIX> Lecture Nextval "
094 "(" SQLCODE ") = " H-MYNUDOSS
100 ERR 0000015SQLCODE 99 IT SQLCODE NOT= ZERO
110 GT 10
120 * CTRL NUDOSS LIBRE -------------- 99 BL
130 * <DEBSUB>RDTCOM
140 EXQ SELECT
150 COUNT(*) INTO :H-MYNBDOSS
160 FROM %1.ZO00
170 WHERE NUDOSS = :H-MYNUDOSS
180 * <FINSUB>
190 COB DISPLAY "<DIGIX> Lecture NbDoss "
200 "(" SQLCODE ") = " H-MYNBDOSS
210 * ERREUR TECHNIQUE --------------- 99 IT SQLCODE NOT= ZERO
220 ERR 0000025SQLCODE AN SQLCODE NOT= W-WP00-NOTFND
230 GT 10
231 * NUDOSS N'EST PAS LIBRE --------- 99 IT H-MYNBDOSS NOT= ZERO
232 COB DISPLAY "<DIGIX> Retour"
233 GB 20
243 * NUDOSS LIBRE ------------------- 99 EL
253 COB DISPLAY "<DIGIX> Fin"
263 M 1 U-MYNUDOSS-FOUND
273 M H-MYNUDOSS UT-NUDOCR
Rattachement du traitement a FP800 et regénération.
Tests
Test de création de dossier.traces STTS_FP800BNM :
<DIGIX> Lecture Nextval (+0000000000) = 000000001
<DIGIX> Lecture NbDoss (+0000000000) = 00
<DIGIX> Fin
Select en base :
SQL> select * from zotd11 where timjdo > '2002-05-22-00.00.00';
NUDOSS T TIVERR TIMJDO VAC CDS
---------- - ------------------- ------------------- --- ---
1 0 0001-01-01-00.00.00 2002-05-22-11.39.44 NJP DG3
Reinitialisation de la séquence (par DROP et CREATE) et nouveau test.
traces STTS_FP800BNM :
<DIGIX> Lecture Nextval (+0000000000) = 000000001
<DIGIX> Lecture NbDoss (+0000000000) = 01
<DIGIX> Retour
<DIGIX> Lecture Nextval (+0000000000) = 000000002
<DIGIX> Lecture NbDoss (+0000000000) = 00
<DIGIX> Fin
Select en base :
SQL> select * from zotd11 where timjdo > '2002-05-22-00.00.00';
NUDOSS T TIVERR TIMJDO VAC CDS
---------- - ------------------- ------------------- --- ---
1 0 0001-01-01-00.00.00 2002-05-22-11.39.44 NJP DG3
2 0 0001-01-01-00.00.00 2002-05-22-11.48.13 NJP DG4
Le traitement a bien vu que le NUDOSS 1 était déjà attribué et a affecté 2 au nouveau dossier.
Comment faire cette tache à partir HR Design center
RépondreSupprimer