[Pgsql-ayuda] Returns SETOF

Carmen Gloria Sepulveda Dedes csepulveda@atichile.com
Thu, 20 Nov 2003 11:16:28 -0300


Hola nuevamente.

Tengo una funcion que retorna varias columnas de distintas tablas, por
lo tanto, he definido un tipo que se ajusta a las columnas que se
retornan:

CREATE TYPE X AS (
      A    tipo_a,
      B     tipo_b,
      ...etc ...
);

CREATE FUNCTION FX(INTEGER)
RETURNS SETOF X AS
'
        SELECT T1.A as A,
                          T2.B as B ....
        FROM     T1, T2
        WHERE  ...
' LANGUAGE 'sql';

Lo distinto de la situacion real es que el select dento de FX
corresponde a la union de varios otros select (no lo incluyo por que es
muy largo).

Al ejecutar la funcion, me da el siguiente error:
ERROR:  Query-specified return tuple and actual function return tuple do
not match

He revisado la definicion del tipo y es acorde con el resultado del
select.  Hice una prueba, creando una tabla identica al tipo (tabla TX),
retornando en la funcion SETOF TX.  Dentro de la funcion, hago primero
un delete a la tabla, luego un insert del select y finalmente un select
* from tx, y funciona bien.  El problema es que esta solucion no es muy
util ya que agrega overhead innecesario.

Cual puede ser el problema???  El equipo esta con pgsql 7.3.3, redhat 9
... puede ser este el problema??, aunque este tambien probe en 7.3.4 con
solaris 9 y el resultado es el mismo.

Saludos y gracias,

CG