【发布时间】:2021-06-20 11:38:39
【问题描述】:
假设我在应用程序启动时导入的sql 脚本中的简化DO 匿名代码块:
-- table definitions omitted
-- assume I want to use anonymous code because of looping
DO
$$
DECLARE
parentId BIGINT;
inputArray VARCHAR[][] := ARRAY [['a', 'A'], ['b', 'B'], ['c', 'C']];
input VARCHAR[];
BEGIN
FOREACH input SLICE 1 IN ARRAY inputArray
LOOP
INSERT INTO myParent (name) VALUES (input[1]) RETURNING id AS parentId;
INSERT INTO myTable (id, name) VALUES (parentId, input[2]);
END LOOP;
END;
$$ LANGUAGE plpgsql;
在导入和执行脚本时,由于以下错误而失败:
[42601] ERROR: query has no destination for result data Where: PL/pgSQL function inline_code_block line 13 at SQL statement
我在https://www.postgresql.org/docs/current/sql-do.html 阅读了 PostgreSQL DO 语句文档,它说:
DO 执行一个匿名代码块,或者换句话说,一个过程语言中的瞬态匿名函数。
代码块被视为没有参数的函数体,返回 void。它被解析并执行一次。
我希望DO 匿名代码中的INSERT 语句能够毫不费力地继续执行。如前所述,它是一个没有参数并返回 void 的函数。为什么它是预期的结果数据和存储它们的东西?
【问题讨论】:
标签: sql postgresql plpgsql anonymous-function