我正在嘗試在 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/410936.html
標籤:
上一篇:我應該寫哪個DjangoORM或原始SQL來獲得我需要的東西
下一篇:一次插入許多表
