postgresql: возможно ли запустить операцию, которая возвращает строки без создания функции? - PullRequest
1 голос
/ 29 апреля 2019

У меня есть некоторые структуры SQL следующим образом:

DO $$
DECLARE
    foo text := 'thisisfoo';
    myId bigint;
BEGIN
    myId = (select id from blah.things);
    insert into bar.widgets(...)
    values (myId, foo, ...);
    select * from bar.widgets;
END $$ language plpgsql;

Когда я запускаю это, я получаю:

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 inline_code_block line 9 at SQL statement
SQL state: 42601

То, что я пробовал: - изменил запрос на insert into ... returning *; и return select * from bar.widgets.Оба приводят к ошибкам, и похоже, что создание функции с возвращаемым типом bar.widget является единственным способом продвижения вперед.

Вопрос: Нет ли способа использовать переменные, не являющиеся функциями, и возвращатьстроки таблицы? Причина в том, что я не хочу добавлять это как функцию к схеме.Он будет использоваться только несколько раз, и я не хочу загромождать схему.

1 Ответ

3 голосов
/ 29 апреля 2019

Вы можете запустить select вне блока do:

...
END $$ language plpgsql;
select * from bar.widgets;

Или даже переписать его без блока do:

insert into bar.widgets(...)
values ((select id from blah.things), 'thisisfoo', ...)
returning *;
...