RE: Regresando tabla

From: Javier Bermúdez Tito <javier_bt(at)hotmail(dot)com>
To: mvillagomez(at)sayab(dot)com(dot)mx, pgsql-es-ayuda(at)postgresql(dot)org
Subject: RE: Regresando tabla
Date: 2006-03-08 00:01:55
Message-ID: BAY116-F38473B8C19B833876F04BF85EF0@phx.gbl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

<html><div style='background-color:'><P>Por si sale error, tambien no te olvides de haber&nbsp;creado el tipo <STRONG>aux_dir</STRONG>, que estas definiendo en <FONT size=2>RETURNS SETOF de tu Funcion.</FONT><BR><BR></P><BR><BR><BR>
<DIV>
<P align=right><FONT face="Lucida Handwriting, Cursive" color=#0099cc size=1><STRONG>El amor es el significado último de todo lo que nos rodea. No es un simple sentimiento, es la verdad, es la alegría que está en el origen de toda creación. </STRONG></FONT><FONT face="Lucida Handwriting, Cursive" color=#ff0000 size=1><STRONG><IMG height=2 src="http://graphics.hotmail.com/greypixel.gif" width="100%" vspace=9>.:: J @ v i e r ::.</STRONG></FONT></P></DIV>
<BLOCKQUOTE style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #a0c6e5 2px solid; MARGIN-RIGHT: 0px"><FONT style="FONT-SIZE: 11px; FONT-FAMILY: tahoma,sans-serif">
<HR color=#a0c6e5 SIZE=1>
From: <I>"Miguel Angel" &lt;mvillagomez(at)sayab(dot)com(dot)mx&gt;</I><BR>To: <I>&lt;pgsql-es-ayuda(at)postgresql(dot)org&gt;</I><BR>CC: <I>&lt;pgsql-es-ayuda(at)postgresql(dot)org&gt;</I><BR>Subject: <I>RE: [pgsql-es-ayuda] Regresando tabla</I><BR>Date: <I>Tue, 7 Mar 2006 17:48:37 -0600</I><BR>&gt;Bueno ya he encontrado el fallo, después de leer todo lo que encontré de<BR>&gt;RETURN NEXT. El problema era la forma en como llamo a la función ya que esta<BR>&gt;me esta regresando una tabla debo leerla:<BR>&gt;<BR>&gt;SELECT * FROM prueba();<BR>&gt;<BR>&gt;En este caso debo tratar a la función como una tabla.<BR>&gt;Perdón por hacer basura.<BR>&gt;<BR>&gt;<BR>&gt;-----Mensaje original-----<BR>&gt;De: Miguel Angel [mailto:mvillagomez(at)sayab(dot)com(dot)mx]<BR>&gt;Enviado el: Martes, 07 de Marzo de 2006 04:32 p.m.<BR>&gt;Para: 'pgsql-es-ayuda(at)postgresql(dot)org'<BR>&gt;Asunto: Regresando tabla<BR>&gt;<BR>&gt;<BR>&gt;Qué tal
lista.<BR>&gt;Ok, tengo dos tablas:<BR>&gt;<BR>&gt;Tabla1 Tabla2<BR>&gt;Clave Nombre Clave Tipo<BR>&gt;1 A 1A AA2<BR>&gt;2 B 1B ZX8<BR>&gt;3 C 1C A12<BR>&gt;4 D 2A C96<BR>&gt;5 E 2B AY4<BR>&gt;<BR>&gt;Me hice una consulta para que me trajera la columna Clave de la Tabla 2 sin<BR>&gt;la ultima letra. Eso ya quedo así:<BR>&gt;<BR>&gt;SELECT (SUBSTRING(clave,1,(LENGTH(clave)-1)))AS clave, tipo FROM tabla2<BR>&gt;<BR>&gt;Con lo que las tables quedan así:<BR>&gt;<BR>&gt;Tabla1 Tabla2 Resultado<BR>&gt;Clave Nombre Clave Tipo Clave Tipo<BR>&gt;1 A 1A AA2 1 AA2<BR>&gt;2 B 1B ZX8 1 ZX8<BR>&gt;3 C 1C A12 1 A12<BR>&gt;4 D 2A C96 2 C96<BR>&gt;5 E 2B AY4 2 AY4<BR>&gt;<BR>&gt;Ahora lo que tengo que hacer es unir las diferentes claves que hay dentro de<BR>&gt;la tabla 1 con su respectivo valor de la tabla resultante o sea:<BR>&gt;<BR>&gt;Clave Nombre Clave Tipo<BR>&gt;1 A 1 AA2<BR>&gt; 1 ZX8<BR>&gt; 1
A12<BR>&gt;<BR>&gt;2 B 2 C96<BR>&gt; 2 AY4<BR>&gt;<BR>&gt;Bien me dirán que esto lo puedo hacer con un CROSS JOIN, pero debo hacerlo<BR>&gt;fila a fila, y solo en aquellos valores que coincidan con la tabla<BR>&gt;resultante, por lo que hice una función con plpgsql. Pero mi problema es que<BR>&gt;no se como poder regresar la tabla resultante por la función. Para poder<BR>&gt;hacer el CROSS junto con la fila de la Tabla1.<BR>&gt;Estoy intentado con este code:<BR>&gt;<BR>&gt;CREATE OR REPLACE FUNCTION prueba() RETURNS SETOF aux_dir AS $$<BR>&gt;DECLARE<BR>&gt; a aux_dir%ROWTYPE;<BR>&gt;BEGIN<BR>&gt; FOR a IN (SELECT (SUBSTRING(clave,1,(LENGTH(clave)-1)))AS clave, tipo FROM<BR>&gt;tabla2) LOOP<BR>&gt; RETURN NEXT a;<BR>&gt; END LOOP;<BR>&gt; RETURN;<BR>&gt;END;<BR>&gt;$$ LANGUAGE PLPGSQL;<BR>&gt;<BR>&gt;SELECT prueba();<BR>&gt;<BR>&gt;Pero me sale este error:<BR>&gt;<BR>&gt;ERROR:
set-valued function called in context that cannot accept a set<BR>&gt;CONTEXT: PL/pgSQL function "prueba" line 5 at return next<BR>&gt;<BR>&gt;Puse todo por si alguien se le ocurre una mejor idea.<BR>&gt;Espero haberme explicado claramente.<BR>&gt;<BR>&gt;<BR>&gt;<BR>&gt;<BR>&gt;---------------------------(fin del mensaje)---------------------------<BR>&gt;TIP 10: visita nuestro canal de IRC #postgresql-es en irc.freenode.net<BR></FONT></BLOCKQUOTE></div></html>

Attachment Content-Type Size
unknown_filename text/html 4.0 KB

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Jaime Casanova 2006-03-08 00:27:52 Re: Introducir null en campo date.
Previous Message Miguel Angel 2006-03-07 23:48:37 RE: Regresando tabla