il mio luogo di sviluppo...
Ho aggiunto uno spazio pubblicitario, ho ceduto anche io. La motivazione è sempre la solita: tirar su due soldi dal proprio sito, che sia un blog o che sia qualcos'altro.
Che poi, in realtà, è un esperimento anche questo, come tutto il resto di ciò che viene pubblicato su questo spazio.
Spero non sia di eccessivo disturbo.
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 |
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