Error al Ejecutar Funcion en plpgsql, como aso curioso me ocurrio este error:
ERROR: se llama una funcion que retorna un conjunto en un contexto que no puede aceptarlo
CONTEXT: PL/pgSQL function "get_record_cadenas" line 7 at return next
Lamentablemente no encontre la solucion facilmente, aqui un ejemplo de una funcion, el error y la solucion:
CREATE OR REPLACE FUNCTION maestros.get_record_cadenas(campod bpchar, tabla bpchar, campof bpchar, cadena bpchar)
RETURNS SETOF record AS
$BODY$
declare
record1 record;
begin
--*
FOR record1 IN execute 'select ' || $1 || ' from ' || $2 || ' where position(' || $3 || ' in ' || quote_literal($4) || ') > 0' LOOP
return next record1;
end loop;
return;
end
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
Al llamar a la funcion de esta forma:
select maestros.get_record_cadenas('usu_nombre', 'maestros.usuarios', 'usu_codigo', '003--*--GERENCIA')
Me arrojaba el error arriba indicado en rojo.
La solucion resulta bastante simple:
select * from maestros.get_record_cadenas('nombres', 'clientes', 'codigo', 'valor1*valor2*valor3') as (usuario varchar);
lunes, 6 de octubre de 2008
Error en el Return Next
Publicado por Marcelino Guerrero en 11:44
Suscribirse a:
Enviar comentarios (Atom)
2 comentarios:
A mi me paso algo parecido, en vez de tener ... returns setof record as ... yo tenía ... returns setof nombre_de_vista as ... y el me daba el mismo error que vos. Pero el problema estaba en como ejecutaba la funcion yo hacia: select nombre_de_funcion() y la solución fue hacer select * from nombre_de_funcion().
Muchas gracias con este post encontré el error estaba dando vueltas unas 3 horas.
Saludos, Gabriel.
Gracias! estaba con el mismo error, y efectivamente es lo que comentas, puesto que lo que se devuelve es una tabla.
Gracias nueva vez Gabriel.
Att: Mairelin
Publicar un comentario