Commenti recenti

lunedì, 20 ottobre 2008

query oracle

Oracle mette a disposizione una tipologia di query molto interessante. Permette di creare strutture padre-figlio dicendo al motore database da quale valore partire e quale campo utilizzare per definire la struttura.

Un esempio di query è la seguente:

SELECT campo1
    FROM tabella
    START WITH campoX = valore
    CONNECT BY PRIOR campoX = campoY

Ad esempio, se avessimo la seguente tabella

campo1 campoX campoY
Verde 1 0
Rosso 2 1
Beige 3 1
Nero 4 0
Bianco 5 1

Il risultato della query sarebbe questo:

Verde
   Rosso
   Beige
   Bianco
Nero

Davvero semplice. La parte iniziale è una select normale, START WITH imposta il valore iniziale del campo, e CONNECT By PRIOR serve, appunto, a dire ad Oracle quali campi utilizzare per definire la struttura, dove CampoX è il padre e CampoY è il figlio.

Se avessimo bisogno di inserire delle condizioni WHERE, sarebbe sufficiente aggiungerle dopo FROM tabella. Se, invece, avessimo bisogno di ordinare i risultati? La cosa è un po' più complicata, aggiungendo un semplice ORDER BY, i risultati verranno ordinati per il campo scelto, ma verrà persa la struttura padre-figlio, dato che Oracle non ne terrà conto nell'ordinamento.

Se volessimo, ad esempio, ordinare i precedenti risultati alfabeticamente, il risultato sarebbe questo:


   Beige
   Bianco
Nero
   Rosso
Verde

Per ovviare a questo problema, basta aggiungere ORDER SIBLINGS BY campoZ alla fine della query:

SELECT campo1, campo2
    FROM tabella
    START WITH campoX = valore
    CONNECT BY PRIOR campoX = campoY
    ORDER SIBLINGS BY campoZ


Che dice ad Oracle di ordinare i risultati a seconda del sottolivello in cui si trovano. Adesso il risultato è corretto ed è:


Nero
Verde
   Beige
   Bianco
   Rosso

postato da: giafai alle ore 09:44 | link | commenti
categorie: oracle, programmazione, query

.Paytowork.net.