sql - 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 的函数是唯一的出路。
问题:有没有办法让非函数使用变量并返回表行?原因是我不想将此作为函数添加到架构中。它只会使用几次,我不想弄乱架构。
解决方案
您可以select
在块外运行do
:
...
END $$ language plpgsql;
select * from bar.widgets;
do
或者甚至在没有块的情况下重写它:
insert into bar.widgets(...)
values ((select id from blah.things), 'thisisfoo', ...)
returning *;
推荐阅读
- database - MongoDb 数据建模,一个大集合 VS 多个小集合
- python-3.x - 使用函数式编程方法按值对字典进行分组
- vb.net - 在 Linq 查询中拆分字段
- node.js - 为什么以这种方式制作路线不起作用
- vue.js - Vuejs - 调用方法函数时未定义
- python - 合并熊猫数据框中的列
- vba - 在电子邮件 vba Outlook 正文中获取特定行
- django - 即使 django-oauth,Django Google 登录/注册也不起作用
- go - 如何模拟另一个文件中的函数
- c# - C# Powershell 脚本未写入 Visual Studio 中的输出