Funcion recursiva

From: Javier Castro Narváez <javier(dot)castro(at)enfoque-si(dot)com>
To: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Funcion recursiva
Date: 2007-10-25 14:26:54
Message-ID: !&!AAAAAAAAAAAYAAAAAAAAAKkeBIzMwzBIvVXVb9Vr3p/izwwAEAAAAGknJSwKBa1NjX1HJ8od3DMBAAAAAA==@enfoque-si.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola,

A ver si me podéis echar una manita y orientarme un poco a la hora de
realizar una función recursiva.
Dada una tabla con la siguiente estructura:

CREATE TABLE caracteristicas
(
id serial NOT NULL,
id_padre integer NOT NULL DEFAULT 0,
nombre character varying(50) NOT NULL,
CONSTRAINT caracteristicas_pkey PRIMARY KEY (id)
)
WITH OIDS;
ALTER TABLE caracteristicas OWNER TO "nfqPeople";
GRANT ALL ON TABLE caracteristicas TO "nfqPeople";

Que almacena por ejemplo la siguiente información estructurada de forma
arbórea:

1;"Color de Ojos";0
2;"Negros";1
3;"Azules";1
4;"Verdes";1
6;"Marrones";1
7;"Color de Pelo";0
8;"Rubio";7
9;"Moreno";7
10;"Castaño";7
11;"Pelirrojo";7
12;"Complexión";0
13;"Fuerte";12
14;"Delgado/a";12
15;"Corpulento";12
16;"Muy delgado/a";12
17;"Gordo";12

Lo que quiero es que la función recorra una deteterminada rama del árbol y
me devuelva una cadena con el resultado en función de un identificador que
se le pase. P.E. Caracteristica(11) me devolvería: "Color de Pelo ->
Pelirrojo"

Programar esto en un lenguaje como c# con una función recursiva no es
complicado ya que vas realizando múltiples select hasta que el id_padre = 0.
Trabajando con una variable static para almacenar los resultados
intermedios. Dado que la estructura permite infinitos niveles padre-hijo, se
puede llegar a realizar muchísimas consultas. Casi seguro que el rendimiento
seria infinitamente mejor si lo procesa el propio PostgreSQL.

La verdad es que salvo alguna función simple o un tigger no he programado
casi nada en Pl/SQL y ando un poco perdido.

Realizar una función recursiva para que devuelva multiples registros no es
dificil, pero creo, que este no es el caso.

Cualquier orientación será bienvenida.

Un saludo a todos,
Javier Castro

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Guillermo =?iso-8859-1?b?TXXxb3o=?= 2007-10-25 14:48:20 RE: Serial / Secuencia
Previous Message Alejandro Larrama 2007-10-25 14:22:54 initdb no inicia la base de datos