PostgreSQL触发函数语法错误帮助请求

问题描述

我一点也不知道为什么postgres抱怨'INSERT'之后的'INTO'这个词。有人知道吗? FWIW我只创建了代码主体,pgAdmin创建了页眉和页脚。

CREATE FUNCTION public.tf_test()
    RETURNS trigger
    LANGUAGE 'plpgsql'
     NOT LEAKPROOF
AS $BODY$BEGIN
  DECLARE targetid orderpayment.id%TYPE;

  INSERT INTO
    orderpayment(currencycode,tableorderid,payment,tip,paymentprocessor)
  VALUES
    (NEW.currency,NEW.orderid,NEW.amount,NEW.tip,1)
  RETURNING id INTO targetid;
  
  NEW.orderpayment = targetid;

  RETURN NEW;
END$BODY$;

返回错误

ERROR: Syntax error at or near "INTO"
LINE 8: INSERT INTO
^
CONTEXT: invalid type name "INTO
orderpayment(currencycode,paymentprocessor)
VALUES
(NEW.currency,1)
RETURNING id INTO targetid"

解决方法

<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/2.1.3/TweenMax.min.js" integrity="sha512-DkPsH9LzNzZaZjCszwKrooKwgjArJDiEjA5tTgr3YX4E6TYv93ICS8T41yFHJnnSmGpnf0Mvb5NhScYbwvhn2w==" crossorigin="anonymous"></script> 语句应在Declare之前。因此正确的定义将如下所示:

begin