Re: cursor empty

From: Adrian Klaver <adrian(dot)klaver(at)aklaver(dot)com>
To: Philipp Kraus <philipp(dot)kraus(at)tu-clausthal(dot)de>, "pgsql-general(at)postgresql(dot)org" <pgsql-general(at)postgresql(dot)org>
Subject: Re: cursor empty
Date: 2018-05-08 13:36:08
Message-ID: bbdbd48c-c3be-d8ca-0c3d-39231f4ecdf0@aklaver.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On 05/08/2018 05:39 AM, Philipp Kraus wrote:
> Hello,
>
> I have got a function with this definition:
>
> CREATE OR REPLACE FUNCTION vectorize(refcursor)
> RETURNS SETOF refcursor
> LANGUAGE 'plpgsql'
> COST 100
> STABLE
> ROWS 1000
> AS $BODY$
>
> begin
> perform pivottable(
> '_vector',
> 'select * from viewdata',
> array['ideate', 'name', 'description', 'latitude', 'longitude'],
> array['parametername'],
> array['parametervalue::text', 'parametervaluetext']
> );
> open $1 scroll for select * from _vector;
> return next $1;
> end
>
> $BODY$;
>
> The perform call creates a dynamic column pivot table, if I run manually
>
> select pivottable(
> '_vector',
> 'select * from viewdata',
> array['ideate', 'name', 'description', 'latitude', 'longitude'],
> array['parametername'],
> array['parametervalue::text', 'parametervaluetext']
> );
> select * from _vector;
>
> I get all the data in the output, so everything is fine.
>
> My goal is now to encapsulate the two lines into a function, so I define
> a stable function and based on the dynamic column set a cursor. I get in
> pgadmin the column names back, but the rows are empty if I run:
>
> select * from vectorize('myvec');
> fetch all from myvec;
>
> Can you explain me, which part is wrong?

I am going to say:

perform pivottable( ...

https://www.postgresql.org/docs/10/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-SQL-NORESULT

"Sometimes it is useful to evaluate an expression or SELECT query but
discard the result, for example when calling a function that has
side-effects but no useful result value. To do this in PL/pgSQL, use the
PERFORM statement:

PERFORM query;

This executes query and discards the result. ..."
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

> Thanks
>
> Phil
>
>
>
>

--
Adrian Klaver
adrian(dot)klaver(at)aklaver(dot)com

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Kumar, Virendra 2018-05-08 13:38:19 Autovacuum holding exclusive lock on table
Previous Message Philipp Kraus 2018-05-08 12:39:26 cursor empty