Problemas dos funciones en postgres (Creación de tablas dinámicamente)

From: "Miguel Angel (dot)" <rev_angel(at)hotmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Problemas dos funciones en postgres (Creación de tablas dinámicamente)
Date: 2007-06-26 21:56:05
Message-ID: BAY131-F35D6A1055B91B0F834EF3D900B0@phx.gbl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Qué tal buenas tardes.

Yo tengo dos funciones, la primera explora un árbol que existe dentro de la
base de datos, que utilizo para obtener los
privilegios de cada usuario; pero ahora se ha vuelto indispensable el
utilizar una función generica que pueda contruir
dicho árbol dentro de cada base de datos en la que lo ejecute; para poder
hacerlo necesito crear una tabla que pueda almacenar
una estructura similar a la siguiente:

columna1 | columna2 | columna3 | columna 4 |
---------------------------------------------|
Director | Gerente_1 | - | - |
Director | Gerente_1 | SubGerA | - |
Director | Gerente_1 | SubGerA | Empleado1 |
Director | Gerente_2 | - | - |
Director | Gerente_2 | SubGerA | - |
Director | Gerente_2 | SubGerA | Empleado1 |

Lo que me permite después crear una estructura en cubos así:

Director
|-Gerente1
| |--SubGerA
| |--Empleado1
|-Gerente2
| |--SubGerA
| |--Empleado1

Por lo que tengo las siguiente dos preguntas:

1ra.- Hay manera de ejecutar como una sentencia una cadena de texto que yo
obtengo de una función que construye dicha cadena, para poder crear la tabla
de forma dinámica independiente al número de niveles que tenga el árbol
jerárquico?
Aquí la sentencia de mi función y su resultado, la cantidad de
columnas las hace independientemente del numero de niveles que tenga el
árbol.

OLAP_generico_A=# SELECT crea_tabla_jerarquica('jerarquia');
crea_tabla_jerarquica
-------------------------------------------------------------------------------------------------------------------
CREATE TABLE jerarquia(nivel_1 varchar, nivel_2 varchar, nivel_3 varchar,
nivel_4 varchar, PRIMARY KEY(nivel_4));
(1 row)

Hay forma de ejecutar el resultado de esta función por pgsql, java, python,
comando, o función que postgres pueda ejecutar dentro de si?

2da.- Dentro de mi función quiero utilizar una tabla temporal, pero al
tratar de ejecutarla me salen errores de tipo OID, dentro de la misma
y en otra función; aquí los errores:

ERROR: relation with OID 131578449 does not exist
CONTEXT: SQL statement "INSERT INTO niveles_temporales VALUES( $1 )"
PL/pgSQL function "cuenta_niveles" line 29 at SQL statement
SQL statement "SELECT * FROM cuenta_niveles( $1 ::integer, $2 ::integer, (
$3 +1)::integer)"
PL/pgSQL function "cuenta_niveles" line 27 at select into variables
SQL statement "SELECT * FROM cuenta_niveles( $1 ::integer, $2 ::integer, (
$3 +1)::integer)"
PL/pgSQL function "cuenta_niveles" line 27 at select into variables
SQL statement "SELECT * FROM cuenta_niveles(3,6,1)"
PL/pgSQL function "crea_tabla_jerarquica" line 8 at select into variables

Y aquí mi función, que trata de crear la tabla temporal, que será usada por
esta y otra función por aparte:

CREATE OR REPLACE FUNCTION crea_tabla_jerarquica(varchar) RETURNS VARCHAR AS
$$
DECLARE
cont INTEGER:=1;
nada VARCHAR;
agrega_columna VARCHAR:='nivel_';
comando VARCHAR:=(SELECT ('CREATE TABLE ' || $1 || '(')::varchar);
BEGIN
CREATE TEMP TABLE niveles_temporales(nivel integer);
SELECT * INTO nada FROM cuenta_niveles(3,6,1);
WHILE (cont<=(SELECT MAX(nivel) FROM niveles_temporales)) LOOP
SELECT (comando || agrega_columna || cont || ' varchar')::varchar INTO
comando;
IF (cont<(SELECT MAX(nivel) FROM niveles_temporales)) THEN SELECT (comando
|| ', ')::varchar INTO comando;
ELSE SELECT (comando || ', PRIMARY KEY(' || agrega_columna || cont ||
'));')::varchar INTO comando;
END IF;
cont:=cont+1;
END LOOP;
RETURN comando;
END;
$$ LANGUAGE PLPGSQL;
SELECT crea_tabla_jerarquica('jerarquia');

Gracias por adelantado.

_________________________________________________________________
Descubre la descarga digital con MSN Music. Más de un millón de canciones.
http://music.msn.es/

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Miguel Rodríguez Penabad 2007-06-26 22:02:05 Re: OT , Obtener ID (PK) dese código VB6 con odbc
Previous Message Juan Carlos Alemán Cuadros 2007-06-26 21:41:03 RE: Ide tipo TOAD.