Error en función para devolver todos los records en un refcursor

From: Marcos Luis Ortiz Valmaseda <marcosluis2186(at)googlemail(dot)com>
To: Lista PostgreSql <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Error en función para devolver todos los records en un refcursor
Date: 2011-08-18 15:30:57
Message-ID: CAJs-K1vfL+r-1RqnR66izCPqhy2AUn=-kozXP3h4QfPeAKd_Cg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Saludos a los listeros
Estoy teniendo problemas con una función que debe devolver todos los records
de una determinada función, que devuelve un refcursor.
Acá les dejo el código:

CREATE OR REPLACE FUNCTION return_refcursor_fetch_all(text, refcursor,
anyarray)
RETURNS REFCURSOR AS $$
DECLARE
v_func ALIAS FOR $1; -- Funcion original
v_ref refcursor; -- Ref cursor de la funcion original
v_ref_2 refcursor;
v_params ALIAS FOR $3; -- Parametros de la funcion
v_array_position int4; -- Posicion del arreglo para la comparacion
v_temp_text text ; -- Variable temporal para la consulta
v_cant_params int4;
BEGIN
-- Insertar codigo de la funcion en forma de texto y ejecutarla a una
variable
v_array_position := 0;
v_temp_text := '';
v_cant_params := array_lenght(v_params, 1); -- Calcula la cantidad de
parametros

-- Recorrer todo el array para construir la candena de los parametros
WHILE v_array_position <= cant_params LOOP
v_temp_text := (v_temp_text ||', ' ||
(v_params[v_array_position])::text); -- Concatena todo y construye la
cadena de los parametros
END LOOP;
-- Ejecutar la consulta construida dinamicamente usando EXECUTE
EXECUTE 'SELECT * FROM '|| v_func ||'('|| v_temp_text || ') INTO ' ||
v_ref || ';';
OPEN v_ref_2 FOR SELECT * FROM v_ref;
RETURN v_ref_2;
END;
$$ LANGUAGE plpgsql;

Y la forma que la estamos usando es así:
select * from
return_refcursor_fetch_all('schema_auditoria.fn_consultar_transaccion',
'p_cursor_registros',
'{null,null,null,null,null,null,null,null,p_cursor_numregistros,p_cursor_registros}');

Y éste es el error que me da:
********** Error **********

ERROR: no se pudo determinar el tipo polimórfico porque el tipo de entrada
es «unknown»
SQL state: 42804

Me imagino que debe ser porque no verifico los tipos de datos cuando estoy
construyendo la consulta dinámica.

Ambiente:
SELECT version();

version
------------------------------------------------------------------------------------------------------------------
PostgreSQL 9.0.4 on i686-pc-linux-gnu, compiled by GCC gcc-4.5.real
(Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2, 32-bit
(1 fila)

Sistema Operativo:
Ubuntu 11.04

¿Qué puede ser esto?

--
Marcos Luis Ortíz Valmaseda
Software Engineer (UCI)
Linux User # 418229
http://marcosluis2186.posterous.com
http://www.linkedin.com/in/marcosluis2186
https://fedoraproject.org/wiki/User:Marcosluis

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2011-08-18 15:40:44 Re: Error en función para devolver todos los records en un refcursor
Previous Message José Francisco Luis Medina 2011-08-18 15:28:23 Equivalencias entre mysql y postgresql