Este es necesario cuando necesitamos montar una tabla que no sabemos hasta cuantos niveles puede tener, le voy  dejar una función para que estraigan los datos, en ocaciones cuando la tabla tiene una descripción muy extensa puede dar un error similar al siguiente: ERROR:  el valor es demasiado largo para el tipo character varying(16)
CONTEXTO:  PL/pgSQL function “aranceles” line 10 at sentencia SQL

Pero ya con esta función esta solventado el problema.

Primero vamos a tener una tabla

CREATE TABLE recursividad
(
  id bigint NOT NULL,
  codigo character varying(16),
  posession character varying(2),
  titulo character varying(2),
  sub_titulo character varying(2),
  identificador character varying(10),
  detalles text,
  detalles2 text,
  cod_recursividad bigint,
  CONSTRAINT recursividad_pkey PRIMARY KEY (id )
)

Debido que si necesitamos solo algunos datos es importante crear una definición del tipo del dato para que no de error y solo utilizar los campos necesario.

CREATE TYPE recursividadtype as (id bigint, detalle text, cod_recursividad bigint );

Creamos la función que ejecutara y buscara la recursividad

CREATE OR REPLACE FUNCTION aranceles(id_tabla integer)
RETURNS text AS
$BODY$
DECLARE
    idente INTEGER :=id_tabla;
    nombre TEXT :=””;
    nombre2 TEXT :=””;
    row arancelestype%ROWTYPE;
BEGIN
    SELECT id, descripcion, cod_recursividad INTO row FROM recursividad WHERE id = idente;
    nombre:= row.detalles;
    idente:= row.cod_recursividad;
    LOOP
        IF(idente IS NULL) THEN
            EXIT;
        ELSE
            SELECT id, detalles, cod_recursividad INTO row FROM recursividad WHERE id = idente;
            nombre2:= row.detalles;
            nombre:= nombre2 ||’\’|| nombre;
            idente:= row.cod_recursividad;
        END IF;
        
    END LOOP;
    RETURN nombre;
END;
$BODY$
LANGUAGE ‘plpgsql’;

Ya puedes insertar los datos en la base de datosrelacionadocon la recursividad

CREATE TABLE recursividad
(
  id bigint NOT NULL,
  codigo character varying(16),
  posession character varying(2),
  titulo character varying(2),
  sub_titulo character varying(2),
  identificador character varying(10),
  detalles text,
  detalles2 text,
  cod_recursividad bigint,
  CONSTRAINT recursividad_pkey PRIMARY KEY (id )
)

INSERT INTO recursividad VALUES (1,'12345567', '12','34','55,'67','Cat6','DESCRIPCION 1',NUL);
INSERT INTO recursividad VALUES (2,'12345567', '12','34','55,'67','Cat6','DESCRIPCION 2',1);
INSERT INTO recursividad VALUES (3,'12345567', '12','34','55,'67','Cat6','DESCRIPCION 3',2);
INSERT INTO recursividad VALUES (4,'12345567', '12','34','55,'67','Cat6','DESCRIPCION 4',3);
INSERT INTO recursividad VALUES (5,'12345567', '12','34','55,'67','Cat6','DESCRIPCION 5',4);

luego ejecuta tu query para ver el detalle

select aranceles(5)

Tendra un resultado de la siguiente manera:

DESCRIPCION 1 \ DESCRIPCION 2 \ DESCRIPCION 3 \ DESCRIPCION 4 \ DESCRIPCION 5

Anuncios