sql - postgresql:是否可以在不创建函数的情况下运行返回行的操作?

标签 sql postgresql plpgsql

我有一些 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 返回类型的函数是唯一的出路。

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

最佳答案

您可以在 do block 之外运行 select:

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

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

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

关于sql - postgresql:是否可以在不创建函数的情况下运行返回行的操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55907194/

相关文章:

sql - 如何克服 OpenXML 的 8000 个字符限制?

sql - 带有 2 个参数的 RTRIM

postgresql - 转换 Exec 参数 $2 类型 : invalid character ‘b’ looking for beginning of value

postgresql - 如何在 PL/pgSQL 中按行类型返回表

PostgreSQL:如何识别数据类型?

mysql - 这个mysql语法有什么错误?

Python 和 sql 服务器

sql - 除了在一个查询中的子查询之外,我如何运行它?

postgresql - 在 Windows 7 上更改/重置 postgresql 用户密码

arrays - 如何循环遍历 JSONb 字段中包含的数组?