sql - 查询仅在 pl/pgSQL 代码块之外有效
问题描述
为什么以下仅在do-declare
-block 之外有效?
create table gd(id integer, a1 float, a2 float, b float);
insert into gd values (1, 1::float, 1::float, 1::float);
do $$
declare
counter integer := 1;
begin
while counter <= 50 loop
insert into gd (select (id + 1)::integer as id,
(a1- 0.001 * avg(d_a1))::float as a1,
(a2- 0.001 * avg(d_a2))::float as a2,
(b - 0.001 * avg(d_b))::float as b
from my_func(...)
group by id, a1, a2, b);
counter := counter + 1;
end loop;
end$$;
insert into gd (select (id + 1)::integer as id,
(a1- 0.001 * avg(d_a1))::float as a1,
(a2- 0.001 * avg(d_a2))::float as a2,
(b - 0.001 * avg(d_b))::float as b
from my_func(...)
group by id, a1, a2, b);
select * from gd;
my_func(...)
以以下形式返回setof record
:
(id integer, a1 float, a2 float, b float, result float, d_a1 float, d_a2 float, d_b float)
如下所述,这可以正常工作,并且需要返回 a setof record
,因为输出会根据输入发生变化。
do-declare
发布的代码仅在-block之外调用时才有效。它在那里完成它的工作并将结果输入到gd
.
id | a1 | a2 | b
----+-------------------+-------------------+-------------------
1 | 1 | 1 | 1
2 | 0.998758771300921 | 0.998219775962089 | 0.997517869616542
(2 rows)
为什么查询只能在do-declare
-block 之外工作?
-block的错误消息do-declare
是:
test.sql:138: ERROR: invalid memory alloc request size 45808919440
解决方案
推荐阅读
- php - Git push remove 上传到我的服务器 -laravel 中的文件
- ios - Xcode 不会为通用设备构建
- d3.js - D3 - 如何在输入中使用条件语句
- json - 如何使用 try.zorba.io 从 JSON 运行 JSONiq
- curl - libcurl 中不支持或禁用协议“”“https”
- amazon-web-services - AWS 中每个用户的动态子域
- c - ATmega32u4 定时器 3 溢出不起作用
- excel-formula - 当给定表不是模式时,用于查找重复项的 Excel 查询
- dart - 如何在 Flutter/dart 中获取一周中特定日期的日期?
- java - 使用 Java API TransmissionWithRecipientArray 对象,如何设置键值数组(Sparkpost)之类的元素