Gracias por tu respuesta, estuve viendo la documentación de Postgre, y algunos ejemplos en la web, y ahí escriben la función tal cual la he presentado y cuando la ejecuto en el DBeaver, tal cual está escrita, el servidor me devuelve todos los resultados que coinciden con el criterio de búsqueda.
Vuelvo a presentar el código SQL con mejor formato
Código SQL
[-]
CREATE OR REPLACE FUNCTION public.sp_buscar_persona(in bapel character varying, OUT codigo character varying, OUT nombre character varying,
OUT apelpat character varying, OUT apelmat character varying, OUT dpto character varying)
RETURNS SETOF record
LANGUAGE plpgsql
AS $function$
declare
reg record;
begin
if (bapel != '') then
for reg in select tbl_persona.cod_persona,tbl_persona.appat_persona,tbl_persona.apmat_persona,tbl_persona.nom_persona, tbl_dpto.nom_dpto
FROM tbl_dpto INNER JOIN tbl_persona ON tbl_dpto.id_dpto = tbl_persona.id_dpto where appat_persona like bapel||'%'
loop
codigo:=reg.cod_persona;
nombre:=reg.nom_persona;
apelpat:=reg.appat_persona;
apelmat:=reg.apmat_persona;
dpto:=reg.nom_dpto;
return next;
end loop;
return;
end if;
end
$function$
;
La línea
sg_persona.RowCount:=x+1; me permite aumentar en uno el número de filas del stringgrid para poder mostrar los registros obtenidos, tal vez no sea la mejor forma pero funciona, si conoces una mejor forma sería excelente si la presentas.
Sin embargo, el problema no es ese, talvez en lugar de retornar SETOF deba retornar TABLE, es decir: RETURNS TABLE(
col1 datatype, col2 datatype,...); o tal vez algo en el código en Delphi que me está faltando.
Haré una pruebas...
Saludos,
David