2008-09-02 6 views

Répondre

0

Vous pouvez créer une structure arborescente à l'aide d'une clé étrangère faisant référence à la même table (une relation «oreille de porc», comme on l'appelle souvent). Ensuite, vous pouvez utiliser la syntaxe CONNECT BY pour traverser l'arbre. Voici un exemple simple:

SQL> create table qs 
    2 (q_id integer primary key 
    3 , parent_q_id integer references qs 
    4 , parent_q_answer varchar2(1) 
    5 , q_text varchar2(100) 
    6*); 

Table created. 

SQL> insert into qs values (1, null, null, 'Is it bigger than a person?'); 

1 row created. 

SQL> insert into qs values (2, 1, 'Y', 'Does it have a long neck?'); 

1 row created. 

SQL> insert into qs values (3, 2, 'Y', 'It is a giraffe'); 

1 row created. 

SQL> insert into qs values (4, 2, 'N', 'It is an elephant'); 

1 row created. 

SQL> insert into qs values (5, 1, 'N', 'Does it eat cheese?'); 

1 row created. 

SQL> insert into qs values (6, 5, 'Y', 'It is a mouse'); 

1 row created. 

SQL> insert into qs values (7, 5, 'N', 'It is a cat'); 

1 row created. 

SQL> commit; 

Commit complete. 

SQL> select rpad(' ',level*4,' ')||parent_q_answer||': '||q_text 
    2 from qs 
    3 start with parent_q_id is null 
    4 connect by prior q_id = parent_q_id; 

RPAD('',LEVEL*4,'')||PARENT_Q_ANSWER||':'||Q_TEXT 
------------------------------------------------------------------------------------------------------------------------------ 
    : Is it bigger than a person? 
     Y: Does it have a long neck? 
      Y: It is a giraffe 
      N: It is an elephant 
     N: Does it eat cheese? 
      Y: It is a mouse 
      N: It is a cat 

7 rows selected. 

Remarque comment le niveau de mot-clé spécial peut être utilisé pour déterminer jusqu'à quel point bas de l'arbre que nous sommes, que je l'ai ensuite utilisé pour mettre en retrait les données pour montrer la structure.

Questions connexes