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
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 |