Re: pass non-formated query to PL function

Поиск
Список
Период
Сортировка
От Joao Miguel Ferreira
Тема Re: pass non-formated query to PL function
Дата
Msg-id CALyyT7Ri3btuFqLVMqSvZ90dCKkDpuDZ6dfRFUxjFbL-7EquKg@mail.gmail.com
обсуждение исходный текст
Ответ на Re: pass non-formated query to PL function  (Gianni Ceccarelli <dakkar@thenautilus.net>)
Список pgsql-general
Hi Pavel and Gianni,

Thank you for the suggestions and documentation. That is exactly the kind of thing I was looking for.

Cool, thx
Joao


On Fri, Apr 2, 2021 at 10:54 AM Gianni Ceccarelli <dakkar@thenautilus.net> wrote:
On 2021-04-02 Joao Miguel Ferreira <joao.miguel.c.ferreira@gmail.com>
wrote:
> Is it possible, in PL/pgSQL, to pass an argument to a function which
> is actually a "query skeleton" that the method will "fill in the
> blanks" and execute it or return it to the caller after ?

you probably want to use the ``EXECUTE`` command:
https://www.postgresql.org/docs/13/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN

Something like this, maybe::

  CREATE FUNCTION run_me_this(in the_query text) RETURNS record
  AS $$
  DECLARE
    this record;
  BEGIN
    EXECUTE the_query INTO this USING 1, 'foo';
    RETURN this;
  END;
  $$ LANGUAGE plpgsql;

  CREATE TABLE test(id serial primary key,name text,value text);
  INSERT INTO test(name,value) VALUES ('foo','something');

  SELECT *
  FROM run_me_this('select value from test where id=$1 and name=$2')
       x(value text);

Notice, though, that ``EXECUTE ... INTO`` will only assign *the first
row* of the results to the given variable (``this`` in my
example). I'm not sure how to work around this limitation.

--
        Dakkar - <Mobilis in mobile>
        GPG public key fingerprint = A071 E618 DD2C 5901 9574
                                     6FE2 40EA 9883 7519 3F88
                            key id = 0x75193F88



В списке pgsql-general по дате отправления:

Предыдущее
От: Gianni Ceccarelli
Дата:
Сообщение: Re: pass non-formated query to PL function
Следующее
От: Vincent Veyron
Дата:
Сообщение: Re: How to implement expiration in PostgreSQL?