无法创建函数:“*”处或附近的语法错误

Failed to create function: Syntax error at or near "*"

我正在尝试使用以下代码在 Supabase 中创建触发器,这将帮助我更新另一个 table 中的特定值。以下是supabase函数的触发代码

BEGIN
  DECLARE num integer;
  SELECT count(*) into num FROM chapters
  WHERE seriesid=new.seriesid;

  INSERT INTO public.series(chapcount);
  WHERE id=new.seriesid;
  values(num);
  RETURN new;

END;

但是,我得到以下错误Failed to create function: Syntax error at or near "*"

有多个错误as you can see in the manual

DECLARE 部分位于 之前 BEGIN。

并且 documented in the manual INSERT 语句没有 WHERE 子句。

因此,假设您已经正确掌握了函数(或过程)的其余部分(您没有向我们展示,PL/pgSQL 块需要如下所示:

DECLARE
  num integer;
BEGIN
  SELECT count(*) 
    into num 
  FROM chapters
  WHERE seriesid = new.seriesid;

  INSERT INTO public.series(id, chapcount);
  values(new.seriesid, num);
  RETURN new;
END;  

我不清楚您对 INSERT 语句的意图。如果您尝试更改 现有 行,则需要 UPDATE 语句:

 UPDATE public.series
    SET chapcount = num
 WHERE id = new.seriesid;

请注意,如果触发器定义为在 series table 上触发,那么您根本不需要更新。使其成为 BEFORE 触发器并简单地分配新计数:

new.chapcount := num;
return new;