0

我正在尝试使用以下代码在 Supabase 中创建一个触发器,该代码将帮助我更新另一个表中的某个值。以下是 supbase 函数的触发代码

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 "*"

4

1 回答 1

1

如您在手册中所见,有多个错误

DECLARE部分在BEGIN之前。

手册中所述,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表上触发,那么您根本不需要 UPDATE。使其成为BEFORE触发器并简单地分配新计数:

new.chapcount := num;
return new;
于 2022-02-26T14:41:57.613 回答