在 CTE 中使用执行语句

Using Execute Statement with CTE

PREPARE insert_DEL_CRN(bigint, char, char, char) as 
insert into
deleted_crns(id, crn, ror, cpr) values(, , , ) 
ON CONFLICT (crn) 
DO update 
   set id=, ror=, cpr=;

正在尝试将以下 CTE 表达式与 EXECUTE insert_DEL_CRN

一起使用
WITH deleted_record as (
   delete from crns where crn='8000440000'
   RETURNING id,crn,ror,cpr
) 
execute insert_DEL_CRN 
select deleted_record.id, deleted_record.crn, deleted_record.ror,
deleted_record.cpr 
from deleted_record;

导致此错误:

ERROR:  syntax error at or near "EXECUTE"
LINE 1: ... where crn='8000440000' RETURNING id,crn,ror,cpr) EXECUTE in...

任何人都可以在这里指出任何具体问题。

您需要将两个语句合二为一。要引用 DO UPDATE 部分中冲突行的值,请使用特殊关键字 excluded

WITH deleted_record as (
   delete from crns 
   where crn='8000440000'
   RETURNING id,crn,ror,cpr
) 
insert into deleted_crns (id, crn, ror, cpr)
select id,crdn,ror,cpr
FROM deleted_records
ON CONFLICT (crn) 
DO update 
   set id = excluded.id, 
       ror = excluded.ror,
       cpr = excluded.cpr;