Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1507 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Est-ce possible en SQL

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Est-ce possible en SQL

n°2300526
inconstate
Posté le 11-05-2017 à 18:05:27  profilanswer
 

Bonjour à tous !  
 
Je suis actuellement en train de bosser sur un sujet SQL.  
 
Je dois remonter une hiérarchie contenue dans une seule et unique table.  
 
Voici un exemple qui fonctionne manuellement plus claire :  
 
J'ai une table ACT d'organisations:  
 
SELECT PARENT_KEY FROM ACT WHERE ACT_NAME='XXXXX';
 
On va dire que PARENT_KEY = 28
 
Je récupère donc la clé de l'organisation parente puis je récupère diverse données avec cette clée
 
SELECT ACT_KEY, PARENT_KEY, ORG_UDF_LEVEL FROM ACT WHERE ACT_KEY=28;
 
Si le niveau de hiérarchie vaut 2, ORG_UDF_LEVEL = 2, j'ai ce qu'il me faut.  
 
Sinon je relance la requête avec le nouveau parent key :  
 
SELECT ACT_KEY, PARENT_KEY, ORG_UDF_LEVEL FROM ACT WHERE ACT_KEY=46;
 
Jusqu'à ce que ORG_UDF_LEVEL = 2.  
 
Je cherche donc une requête qui me recherche automatiquement la valeur qui m'interesse.  
 
J'ai déjà fait ça :  
 
SELECT ACT.ACT_NAME, ACT.PARENT_KEY, ACT.ORG_UDF_LEVEL,  
ACT2.ORG_UDF_SHORT_NAME, ACT2.ORG_UDF_LEVEL, ACT3.ORG_UDF_SHORT_NAME, ACT3.ORG_UDF_LEVEL
FROM ACT  
LEFT JOIN ACT ACT2  ON ACT.PARENT_KEY=ACT2.ACT_KEY  
LEFT JOIN ACT ACT3  ON ACT2.PARENT_KEY=ACT3.ACT_KEY  
ect...
WHERE ACT.ACT_NAME='XXXXX';
 
Mais c'est clairement pas la solution. J'ai pas besoin des données intermédiaires.
 
Il y a ce script qui fonctionne :  
declare
v_level varchar2(2);
v_parent_key varchar2(7);
begin
v_level :=99;
v_parent_key :='4';
WHILE v_level > 2 LOOP
select
PARENT_KEY, ORG_UDF_LEVEL
into v_parent_key, v_level
from
ACT
where
ACT_KEY = v_parent_key;
IF v_level = 2 THEN
dbms_output.put_line('PARENT KEY :' || v_parent_key || ' LEVEL : '||v_level);
END IF;
END LOOP;
end;
 
Mais j'aimerai du SQL,  
 
Merci d'avance,
 
Jimmy

mood
Publicité
Posté le 11-05-2017 à 18:05:27  profilanswer
 

n°2300563
rufo
Pas me confondre avec Lycos!
Posté le 12-05-2017 à 22:43:50  profilanswer
 

Tu peux tout à fait passer par une procédure stockée qui sera appelée dans une requête SQL ;)
 
Edit : comme j'ai compris, tu veux récupérer le noeud racine d'une arborescence à partir d'un noeud enfant, c'est bien ça ? La modélisation de ton arbo est adaptée en cas de nombreuses MAJ des enregistrements mais pas pour de la lecture. En effet, tu l'as constaté, cette modélisation nécessite des requêtes récursives. Il existe une autre modélisation d'une arbo en utilisant la représentation intervallaire. Gros avantage : en une seule requête SQL, tu récupères toute l'arbo ou le noeud racine. Par contre, cette représentation est plus adaptée quand tu fais plus de lecture (affichage) de l'arbo que de MAJ.
 
https://openclassrooms.com/courses/ [...] ervallaire


Message édité par rufo le 12-05-2017 à 22:49:45

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Est-ce possible en SQL

 

Sujets relatifs
Mail automatique (PHP si possible) depuis données SQL[SQL Server 2008]Lié des tables entre 2 Bases - possible ?
[SQL] Requete possible ?[SQL Server] Est-il possible de créer des formulaires ?
Est-il possible de créer des formulaires avec Sql Server ?est-il possible d'utiliser une fonction de son cru ds une requète SQL?
[SQL] Passé de lignes à collones, possible ? [VB.NET] Sauvegarde/Restauration base SQL -> C'est possible?
Executer du SQL en js sans fichier php annexe...c'est possible?[SQL] Importer BDD au Format .sql sur Access, Possible?
Plus de sujets relatifs à : Est-ce possible en SQL


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR