首页 > 解决方案 > postgresql:是否可以在不创建函数的情况下运行返回行的操作?

问题描述

我有一些结构如下的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 *;and return select * from bar.widgets。两者都产生错误,看起来创建一个返回类型为 bar.widget 的函数是唯一的出路。

问题:有没有办法让非函数使用变量并返回表行?原因是我不想将此作为函数添加到架构中。它只会使用几次,我不想弄乱架构。

标签: sqlpostgresqlplpgsql

解决方案


您可以select在块外运行do

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

do或者甚至在没有块的情况下重写它:

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

推荐阅读