Code : Tout sélectionner
CREATE TABLE MAILLON
(
ID NUMBER PRIMARY KEY,
VALEUR NUMBER,
SUIVANT NUMBER REFERENCES MAILLON(ID)
);Code : Tout sélectionner
CREATE TABLE LISTECHAINEE
(
DEBUT PRIMARY KEY,
FOREIGN KEY (DEBUT) REFERENCES MAILLON (ID)
);Code : Tout sélectionner
CREATE OR REPLACE PROCEDURE INITLISTECHAINEE IS
CURSOR maillons IS
SELECT * FROM MAILLON;
m maillons%rowtype;
nbPredecesseurs NUMBER;
BEGIN
FOR m IN maillons LOOP
SELECT count(*) INTO nbPredecesseurs
FROM MAILLON
WHERE suivant = m.ID;
IF nbPredecesseurs = 0 THEN
INSERT INTO LISTECHAINEE VALUES (m.ID);
END IF;
END LOOP;
END;- Ce sous-programme part du principe que si un élément n a pas de prédécesseur, il est un début de liste chaînée.
- Il est possible, sans désactiver de contrainte déclarative, de créer un circuit dans maillon.
- Si la table LISTECHAINEE est vide avant l exécution de INITLISTECHAINEE, il est possible que l exception DUP_VAL_ON_INDEX soit levée pendant l exécution de INITLISTECHAINEE.
- Il n est pas possible, sans désactiver de contrainte déclarative, de placer dans MAILLON des données telles qu un maillon ait plusieurs prédécesseurs.
- INITLISTECHAINEE peut être appelé plusieurs fois de suite sans que cela lève d exception.