Rob Sargent <robjsargent@gmail.com> writes:
> One of my plpgsql functions is now throwing this error:
> ERROR: query has no destination for result data
> HINT: If you want to discard the results of a SELECT, use PERFORM instead.
> CONTEXT: PL/pgSQL function optimal_pvalue_mono(text,text,integer,double precision,integer) line 65 at SQL statement
> The code referenced at line 65 is the last line in a "for row in query” construct as follows:
> 54 for segp in
> 55 select s.id, s.firstmarker, s.lastmarker,
> 56 v.ipv,
> 57 array_length(p.probands,1) as pbs,
> 58 s.lastmarker - s.firstmarker as mks
> 59 from segment s
> 60 join imputed_pvalue_t v on s.id = v.segment_id
> 61 join probandset p on s.probandset_id = p.id
> 62 join probandset_group_member m on p.id = m.member_id
> 63 where s.markerset_id = mkset
> 64 and m.group_id = pbsgid
> 65 order by ipv, pbs, mks
> 66 LOOP
I think perhaps you've miscounted lines somehow, or are looking into
the wrong function. The "at SQL statement" bit indicates that plpgsql
thinks it's dealing with a run-of-the-mill SQL command, not a FOR loop;
moreover, looking at the source code shows that "query has no destination
for result data" is thrown only in exec_stmt_execsql, which ditto.
Another possibility, perhaps, is that there's some syntax error a little
bit above what you've shown us, such that this stanza isn't being seen
as a FOR loop at all, but as more lines in a SQL command that started
earlier. I'm not entirely sure how such a case would have got past
parsing and into execution, but it's worth thinking about.
In any case, this isn't solvable with just what you've shown us here.
regards, tom lane