Ver Mensaje Individual
  #3 (permalink)  
Antiguo 28/04/2010, 23:13
Avatar de calakra
calakra
 
Fecha de Ingreso: septiembre-2009
Mensajes: 182
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: PROBLEMON!!!! con funcion

Gracias, pero lo que pasa me has mandando respuestas muy buenas, que de hecho investigo y trato de probar, digo soy nuevo, pero tambien leo y trato de aplicar.
por otro lado como te había comentado. mira para ser mas explicito y no errarle al explicar si uso el return next se debe llamar a la funcion de esta forma

create function prueba().....
DECLARE
tabla record;
...
...
BEGIN
FOR tabla IN SELECT id,name,last_name FROM usuario LOOP
RETURN NEXT tabla;
END LOOP;
....
...
END;


aqui lo llamarias de esta forma

SELECT * FROM prueba() AS f(a varchar,d varchar,c varchar);

aquí es fácil llamar a la función debido a que tu sabes cuantas columnas te va a regresar que en este caso son tres.

pero en mi funcion genero un query la cual tiene 'n' columnas, ya que es dinamica
mira, es muy parecido al árbol que te había enseñado antes del arbol.
digamos que en la empresa solo estas tu y otro chavo el cual es tu empleado, el resultado seria algo asi

Código HTML:
<table>
<tr><td>NIVEL1</td><td>NIVEL2              </td><td>ID</td></tr>
<tr><td>huesos</td><td>------                  </td><td>00</td></tr>
<tr><td>huesos</td><td>chavodelhuesos</td><td>01</td></tr>
</table> 

ahi esta facil saber cuantas columnas regresas, pero digamos que la empresa crece y hay mas de 300 empleados y algunos van de baja y otros van de alta, pues cada empleado tiene un nivel hay quienes te contesten a ti y hay quienes contesten al tu chavo y hay quienes contesten a tu chavo aumentando los niveles a algo asi.

Código HTML:
<table>
<tr><td>NIVEL1</td><td>     NIVEL2          </td><td>NIVEL3        </td><td>NIVEL4        </td><td>ID</td></tr>
<tr><td>huesos</td><td>     ------          </td><td>-----         </td><td>-----         </td><td>00</td></tr>
<tr><td>huesos</td><td>chavodelhuesos       </td><td>empleadonuevo </td><td>------        </td><td>02</td></tr>
<tr><td>huesos</td><td>chavodelhuesos       </td><td>empleadonuevo2</td><td>-----        </td><td>04</td></tr>
<tr><td>huesos</td><td>chavodelhuesos       </td><td>empleadonuevo2</td><td>otro          </td><td>03</td></tr>
<tr><td>huesos</td><td>chavodelhuesos       </td><td>------------- </td><td>-----        </td><td>01</td></tr>
</table> 
mira, ahora digamos que la empresa crese y tu sigues siendo jefe y sigue tu chavo, pero ahora a tu chavo le responden dos personas (empleadonuevo y empleadonuevo2) pero a empleadovuevos2 le responde otra persona (otro), si te das cuenta es dinamica y si agregas a otra persona que responda a la persona "otro" se tendria que agregar un nivel.
espero que con esto quede claro del por que el RETURN NEXT es mas complicado (o eso pienso).

De verdad que si se te ocurre algo mas facil dimela!!!! Como lo comente soy algo nuevo y de verdad agradesco tu ayuda. como tambien te habia comentado, no puedo agregar una tabla nueva y tampoco puedo agregar mas campos y lo debo de hacer con postgresql. espero ahora quede mas claro mi problema.

ahora por ultimo

lo que me dijiste quedaria asi?
EXECUTE 'CREATE VIEW arbol AS'||cuery;

sabiendo que el la variable cuery trae toda la cadena del query?