在基于Postgresql的SUPABASE函数中,我想写一个函数,将客户的名称作为输入,然后在函数的主体中实现此逻辑,如果客户尚未创建,则将其插入到客户表中,然后存储其ID并创建订单行,如果客户已经存在,则存储其ID然后创建订单
函数如下:
create or replace function FUNC_new_order(name text , qty int)
returns void as
$$
begin
declare CSID int ;
select customer_id into CSID from customer where customer_name = name ;
if NOT FOUND then
insert into customer(customer_name) values(name);
select customer_id into CSID from customer where customer_name = name ;
--create order
insert into "order"(customer_id , order_qty)values(CSID, qty);
end;
$$
language plpgsql ;
字符串
但在supply-up中,它返回以下错误:
ERROR: 42601: syntax error at or near "into"
LINE 22: select customer_id into CSID from customer where customer_name = name ;
^
CONTEXT: invalid type name "customer_id into CSID from customer where customer_name "
型
1条答案
按热度按时间dphi5xsq1#
使用postgres,无论客户是否存在,您都可以在一个查询中插入两个表。
test customer
和数量=500
的示例字符串
如您所见,查询使用了以下组合:
ON CONFLICT DO NOTHING
:假设customer_name
是unique
,如果新客户端违反了唯一性约束,则不要插入新客户端。RETURNING customer_id
:是否插入客户,给予我对应的customer_id
order
表时将所有内容放在一起(我相信您已经知道,根据您在问题中被迫引用它的方式,这是一个可怕的表名;我建议您至少将其重命名为customer_order
)。我让你把这个查询放到你的函数中,如果你愿意,你可以添加一个
RETURNING order_id
子句来获取创建订单的id。