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
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 |