我想呼叫我的函式,但出現此錯誤:
錯誤:列參考“串列”不明確第 3 行:SET list = ARRAY_APPEND(list, input_list2),
錯誤位于 array_append 函式內的第二個串列中。
我的功能:
CREATE OR REPLACE FUNCTION update_order(input_id uuid,input_sku text,input_store_id uuid,input_order_date bigint,input_asin text,input_amount int,input_list text[],input_price real,input_list2 text) RETURNS void LANGUAGE plpgsql AS
$body$
#variable_conflict use_column
BEGIN
INSERT INTO orders_summary(id,sku,store_id,order_date,asin,amount,list,price)
VALUES(input_id,input_sku,input_store_id,to_timestamp(input_order_date / 1000.0),input_asin,input_amount,input_list,input_price) ON CONFLICT(sku,order_date) DO UPDATE
SET list = ARRAY_APPEND(list, input_list2),
amount = amount input_amount,
price = input_price
WHERE NOT list @> input_list;
END
$body$;
uj5u.com熱心網友回復:
您必須在插入查詢中使用別名,因為list有兩個參考,一個參考 inEXCLUDED.list和另一個參考更新陳述句的列。
請檢查以下查詢(我os在查詢中附加帶有名稱的別名):
CREATE OR REPLACE FUNCTION update_order(input_id uuid,input_sku text,input_store_id uuid,input_order_date bigint,input_asin text,input_amount int,input_list text[],input_price real,input_list2 text) RETURNS void LANGUAGE plpgsql AS
$body$
#variable_conflict use_column
BEGIN
INSERT INTO orders_summary as os (id,sku,store_id,order_date,asin,amount,list,price)
VALUES(input_id,input_sku,input_store_id,to_timestamp(input_order_date / 1000.0),input_asin,input_amount,input_list,input_price) ON CONFLICT(sku,order_date) DO UPDATE
SET list = ARRAY_APPEND(os.list, input_list2),
amount = os.amount input_amount,
price = input_price
WHERE NOT os.list @> input_list;
END
$body$;
或者您可以使用表名:
CREATE OR REPLACE FUNCTION update_order(input_id uuid,input_sku text,input_store_id uuid,input_order_date bigint,input_asin text,input_amount int,input_list text[],input_price real,input_list2 text) RETURNS void LANGUAGE plpgsql AS
$body$
#variable_conflict use_column
BEGIN
INSERT INTO orders_summary (id,sku,store_id,order_date,asin,amount,list,price)
VALUES(input_id,input_sku,input_store_id,to_timestamp(input_order_date / 1000.0),input_asin,input_amount,input_list,input_price) ON CONFLICT(sku,order_date) DO UPDATE
SET list = ARRAY_APPEND(orders_summary.list, input_list2),
amount = orders_summary.amount input_amount,
price = input_price
WHERE NOT orders_summary.list @> input_list;
END
$body$;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/358155.html
標籤:sql PostgreSQL的
