sql - Postgres,函数,在插入 vladate 数组值之前
问题描述
这是我的功能`
create or replace function test.insert(_orderid integer, __partnerids
integer[], __maginitude double precision[])
returns boolean
language plpgsql
as $$
DECLARE res boolean;
BEGIN
PERFORM orderid
FROM test.order_partner_magnitude
WHERE orderid = _orderid
FOR UPDATE SKIP LOCKED;
DELETE
FROM test.order_partner_magnitude
WHERE orderid = _orderId;
INSERT INTO test.order_partner_magnitude(orderid, partnerid, magnitude)
SELECT _orderId, unnest(__partnerids),unnest(__maginitude);
res =true ;
RETURN res;
end ;
$$;
一些使用示例SELECT test.insert(1, '{30,10,20}','{46,59,12}');
结果将是
orderid | partnerid | magnitude
1 | 30 | 46
1 | 10 | 59
1 | 20 | 12
现在我需要检查合作伙伴是否忙碌,我可以通过此查询获取忙碌的合作伙伴 ID
SELECT partnerid from test.order_partner WHERE status = 1
;
插入结果必须为 ` 后,ID 为 20 的示例伙伴正忙
orderid | partnerid | magnitude
1 | 30 | 46
1 | 10 | 59
我想用 1 个插入查询插入所有数据,比如在函数中,所以不能partnerid
从参数循环,还有其他方法吗?如果没有办法,我可以更改数据类型、示例[[partnerid, magnitude],[partnerid, magnitude]......]
或任何其他类型的女巫将有助于解决这个问题。
解决方案
在一个查询中可行,例如:
db=# with c(o, p, m) as (values (1, '{30,10,20}'::int[],'{46,59,12}'::int[]))
, op(i, status) as (values(20,1))
, mypart as (select o, unnest(p) pa, unnest(m) me from c)
select mypart.*
from mypart
left outer join op on i = pa
where i is null;
o | pa | me
---+----+----
1 | 30 | 46
1 | 10 | 59
(2 rows)
所以对你来说:
INSERT INTO test.order_partner_magnitude(orderid, partnerid, magnitude)
with c(o, p, m) as (values (_orderId, __partnerids, __maginitude))
, mypart as (select o, unnest(p) pa, unnest(m) me from c)
select mypart.*
from mypart
left outer join test.order_partner on partner_id = pa
where i is null;
推荐阅读
- vue.js - 使用 Nuxt.js 对身份验证进行调度操作
- php - 从数组元素中获取某个单词后的字符串
- php - 在项目中调用 .env 文件的正确方法
- r - 从 GeoPackage 中删除图层
- sql-server - SQL Server SQLCLR 函数在从一个 DB 复制到另一个 DB 后收到参数错误
- node.js - 收件人未收到 Docusign 复合模板,但显示在 DS 收件箱/已发送
- machine-learning - 自动将 On-Premise ML 训练模型移动到 Azure 存储
- html - 如何更改 HTML 中标题的颜色?
- android - Android Studio:模式中的 TableRow 不起作用
- java - 无法在 .Net c# 上匹配来自 Java 的 SHA256withRSA 签名