Je dispose d'une table avec une PK qui a une FK sur elle-même.
Je suis en train de faire des tests pour une requête hiérarchique, pourriez vous regarder ce qui fait que la première requête sql fonctionne correctement, mais la deuxième ne se termine jamais ... hors il y a maximum 50 records dans la table ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 CREATE TABLE STAR.CATEGORIE_ARTISTIQUE ( NS_CAT_ARTISTIQUE_ID INTEGER NOT NULL , TE_NOM VARCHAR(100) , NS_PARENT_AT_ARTISTIQUE_ID INTEGER , TE_CO_TYPE_FORMULAIRE VARCHAR(100) NOT NULL , TS_MISE_A_JOUR TIMESTAMP NOT NULL , TE_MISE_A_JOUR VARCHAR(30) NOT NULL , TS_CREATION TIMESTAMP NOT NULL , TE_CREATION VARCHAR(30) NOT NULL , PRIMARY KEY (NS_CAT_ARTISTIQUE_ID ) , FOREIGN KEY CATART1 (NS_PARENT_CAT_ARTISTIQUE_ID ) REFERENCES STAR.CATEGORIE_ARTISTIQUE ON DELETE CASCADE ) IN STARDB01.CATART
-- OK ==> renvoit le premier niveau de ma hiérarchie
-- NOT OK , ne se termine jamais
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 WITH n( NS_CAT_ARTISTIQUE_ID , NS_PARENT_AT_ARTISTIQUE_ID) AS (SELECT NS_CAT_ARTISTIQUE_ID, NS_PARENT_AT_ARTISTIQUE_ID FROM STAR.CATEGORIE_ARTISTIQUE WHERE NS_PARENT_AT_ARTISTIQUE_ID IS NULL UNION ALL SELECT nplus1.NS_CAT_ARTISTIQUE_ID, nplus1.NS_PARENT_AT_ARTISTIQUE_ID FROM STAR.CATEGORIE_ARTISTIQUE as nplus1, n WHERE n.NS_PARENT_AT_ARTISTIQUE_ID = nplus1.NS_PARENT_AT_ARTISTIQUE_ID) SELECT NS_CAT_ARTISTIQUE_ID, NS_PARENT_AT_ARTISTIQUE_ID FROM n;
Autre question : conseillez vous un DELETE CASCADE ? Quel est le risque ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 WITH n( NS_CAT_ARTISTIQUE_ID , NS_PARENT_AT_ARTISTIQUE_ID) AS (SELECT NS_CAT_ARTISTIQUE_ID, NS_PARENT_AT_ARTISTIQUE_ID FROM STAR.CATEGORIE_ARTISTIQUE WHERE NS_PARENT_AT_ARTISTIQUE_ID =1000 UNION ALL SELECT nplus1.NS_CAT_ARTISTIQUE_ID, nplus1.NS_PARENT_AT_ARTISTIQUE_ID FROM STAR.CATEGORIE_ARTISTIQUE as nplus1, n WHERE n.NS_PARENT_AT_ARTISTIQUE_ID = nplus1.NS_PARENT_AT_ARTISTIQUE_ID) SELECT NS_CAT_ARTISTIQUE_ID, NS_PARENT_AT_ARTISTIQUE_ID FROM n;
Partager