sql - Postgresql 列引用不明确
问题描述
我想调用我的函数,但出现此错误:
错误:列引用“列表”不明确第 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$;
解决方案
您必须在插入查询中使用别名,因为list
有两个引用,一个引用 in EXCLUDED.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$;
推荐阅读
- windows - 在 Windows 上更改 vue cli 创建路径位置
- nestjs - NestJS:在 cron 作业执行期间未定义注入的依赖项
- java - 使用 2D 数组将 PseudoCode 转换为 Java
- python-3.x - 尝试使用 Python、Mesa 和 Networkx 从网络图中删除特定边时出现意外显示错误
- php - 身份验证用户在身份验证 API 护照之外显示 Null
- sql-server - 使用 CosmosDB 数据迁移工具将多对多关系映射到字符串数组?
- swift - 如何在 SwiftUI 中为列表创建标题?
- c# - 如何使实体框架不为某些表创建类?
- visual-studio - CMake 中的 Visual Studio 项目引用
- java - 输出的动态 Web 服务器 servlet 问题