Skip to main content
 

Filtrare select gerarchiche usando i discendenti

Useremo la funzione sys_connect_by_path.

Esempio

select * from (
    select code id_S,
       trim(rpad(' ', (level - 1) * 4, '.')) || nome Nome_S,
       level level_S,
       sys_connect_by_path(code, '/') path_S
    from tableName
    start with code_mother = 0
    connect by code_mother = PRIOR code
) where path_s not like '%filter%'

Spiegazione

La funzione SYS_CONNECT_BY_PATH può essere usata nelle query gerarchiche per costruire una stringa che rappresenti il path dalla root della gerarchia fino al record corrente.

SYS_CONNECT_BY_PATH lavora effettuando una concatenzione ricorsiva dei valori che restituisce ad ogni livello:

  • path1 := string_expression1||format_string rappresenta il path dalla radice fino al primo resultset
  • path2 := path1||string_expression2||format_string rappresenta il path dalla radice fino al secondo resultset
  • . . .
  • pathN := path(N-1)||string_expressionN||format_string rappresenta il path dalla radice fino al N-esimo resultset

I parametri passati a SYS_CONNECT_BY_PATH non possono contenere costrutti gerarchici, inclusi i seguenti:

  • gli operatory unari CONNECT_BY_ROOT e PRIOR
  • le pseudocolonne CONNECT_BY_ISCYCLE, CONNECT_BY_ISLEAF, o LEVEL
  • la funzione SYS_CONNECT_BY_PATH stessa
  • espressioni aggregate di qualsiasi tipo

Il valore restituito da SYS_CONNECT_BY_PATH è un LVARCHAR(4000).