Regresando una tabla

From: "Miguel Angel" <mvillagomez(at)sayab(dot)com(dot)mx>
To: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Regresando una tabla
Date: 2006-03-07 22:31:07
Message-ID: 20060307223129.0E0F69DC801@postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda


Qué tal lista.
Ok, tengo dos tablas:

Tabla1 Tabla2
Clave Nombre Clave Tipo
1 A 1A AA2
2 B 1B ZX8
3 C 1C A12
4 D 2A C96
5 E 2B AY4

Me hice una consulta para que me trajera la columna Clave de la Tabla 2 sin
la ultima letra. Eso ya quedo así:

SELECT (SUBSTRING(clave,1,(LENGTH(clave)-1)))AS clave, tipo FROM tabla2

Con lo que las tables quedan así:

Tabla1 Tabla2 Resultado
Clave Nombre Clave Tipo Clave Tipo
1 A 1A AA2 1 AA2
2 B 1B ZX8 1 ZX8
3 C 1C A12 1 A12
4 D 2A C96 2 C96
5 E 2B AY4 2 AY4

Ahora lo que tengo que hacer es unir las diferentes claves que hay dentro de
la tabla 1 con su respectivo valor de la tabla resultante o sea:

Clave Nombre Clave Tipo
1 A 1 AA2
1 ZX8
1 A12

2 B 2 C96
2 AY4

Bien me dirán que esto lo puedo hacer con un CROSS JOIN, pero debo hacerlo
fila a fila, y solo en aquellos valores que coincidan con la tabla
resultante, por lo que hice una función con plpgsql. Pero mi problema es que
no se como poder regresar la tabla resultante por la función. Para poder
hacer el CROSS junto con la fila de la Tabla1.
Estoy intentado con este code:

CREATE OR REPLACE FUNCTION prueba() RETURNS SETOF aux_dir AS $$
DECLARE
a aux_dir%ROWTYPE;
BEGIN
FOR a IN (SELECT (SUBSTRING(clave,1,(LENGTH(clave)-1)))AS clave, tipo FROM
tabla2) LOOP
RETURN NEXT a;
END LOOP;
RETURN;
END;
$$ LANGUAGE PLPGSQL;

SELECT prueba();

Pero me sale este error:

ERROR: set-valued function called in context that cannot accept a set
CONTEXT: PL/pgSQL function "prueba" line 5 at return next

Puse todo por si alguien se le ocurre una mejor idea.
Espero haberme explicado claramente.

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2006-03-07 23:05:28 Re: Consulta sobre Transacciones.
Previous Message Mario Gonzalez 2006-03-07 21:48:19 Re: formatear fecha