我正在尝试在 postgreSQL 中创建一个函式,我需要在其中输入多行,并且在插入时,我需要获取每一行的 id,以便稍后在函式中使用它以插入另一个表。
我下面的功能部分是我正在使用的。我已经用 WITH 子句包装了它,以便以后可以使用 pages_ids。
create or replace function insert_webpages (query_domain_id int, query_page_titles text[], query_page_slugs text[])
returns table (new_webpage_id int[]) as
$$
DECLARE new_webpage_id int[];
BEGIN
WITH webpage_rows AS (
INSERT INTO webpages (domain_id, title, slug)
VALUES (query_domain_id, unnest(query_page_titles), unnest(query_page_slugs))
RETURNING id into new_webpage_id
)
...
我目前面临的问题是我知道最后一行没有将所有 id 输入到 new_webpage_id 阵列中。
那么如何修复它,使其将新输入行的每个 id 输入到 new_webpage_id 阵列中?
uj5u.com热心网友回复:
values
表达式无效,那里不允许设定回传函式(即)unnest
。CTE 不需要into
内部的子句,而是需要紧随其后的 select 陈述句。尝试
WITH webpage_rows(wr_id) AS
(
INSERT INTO webpages (domain_id, title, slug)
select query_domain_id, unnest(query_page_titles), unnest(query_page_slugs)
returning id
)
select array_agg(wr_id) into new_webpage_id from webpage_rows;
不相关,但我认为拥有同名的变量和回传表列不是一个好主意。
uj5u.com热心网友回复:
试试这个 :
WITH webpage_rows AS (
INSERT INTO webpages (domain_id, title, slug)
VALUES (query_domain_id, unnest(query_page_titles), unnest(query_page_slugs))
RETURNING id -- id is to be replaced by the column of the table webpages and which must be aggregated into the array new_webpage_id
)
SELECT array_agg(new_webpage_id)
INTO new_webpage_id
FROM webpage_rows
0 评论