Saludos
Estoy en creación de una función que recive como parámetro el nomre de otra
función, sus parámetros en un arreglo, y un refcursor que devuelve la misma.
La idea general es usar esta función para devolver todos los campos del
cursor de la otra función y así poder aplicarle ORDER BY, GROUP BY y
cualquier operación sobre uno de eso campos.
Acá está el código de la función:
CREATE OR REPLACE FUNCTION public.return_refcursor_fetch_all(text,
refcursor, anyarray)
RETURNS REFCURSOR AS $$
DECLARE
v_func ALIAS FOR $1; -- Funcion original
v_ref ALIAS FOR $2; -- Ref cursor de la funcion original
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
BEGIN
-- Insertar codigo de la funcion en forma de texto y ejecutarla a una
variable
v_array_position := 0;
v_temp_text := '';
-- Recorrer todo el array para construir la candena de los parametros
WHILE v_array_position <= lenght(v_params) LOOP
v_temp_text := v_params[v_array_position] || ','
v_array_position = v_array_position + 1
END LOOP;
-- Ejecutar la consulta construida dinamicamente usando EXECUTE
EXECUTE 'SELECT * FROM '|| v_func ||'('|| v_temp_text || ')'' INTO ' ||
v_ref || '';
OPEN v_ref;
RETURN v_ref;
END;
$$ LANGUAGE plpgsql;
Entonces el error que arroja es el siguiente:
ERROR: syntax error at or near "$2"
LÍNEA 1: SELECT $1 [ $2 ] || ',' $2 = $2 + 1 END LOOP
^
CONSULTA: SELECT $1 [ $2 ] || ',' $2 = $2 + 1 END LOOP
CONTEXTO: SQL statement in PL/PgSQL function "return_refcursor_fetch_all"
near line 15
********** Error **********
ERROR: syntax error at or near "$2"
SQL state: 42601
Context: SQL statement in PL/PgSQL function "return_refcursor_fetch_all"
near line 15
--
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