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

Responder a