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