0

I haven't the slightest idea why postgres is complaining about the word 'INTO' after 'INSERT'. Does anyone know? FWIW I only created the body of the code, pgAdmin created the header and footer.

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$;

returns the error

ERROR: syntax error at or near "INTO"
LINE 8: INSERT INTO
^
CONTEXT: invalid type name "INTO
orderpayment(currencycode,tableorderid,payment,tip,paymentprocessor)
VALUES
(NEW.currency,NEW.orderid,NEW.amount,NEW.tip,1)
RETURNING id INTO targetid"
Rick DeBay
  • 315
  • 1
  • 5
  • 13

1 Answers1

0

Declare statement should be before begin. So the correct definition will be like below:

CREATE or REPLACE FUNCTION public.tf_test()
    RETURNS trigger

    NOT LEAKPROOF AS 

$BODY$ 
    DECLARE 
     targetid orderpayment.id%TYPE;
   
    BEGIN
  

    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$
LANGUAGE plpgsql;
Akhilesh Mishra
  • 5,876
  • 3
  • 16
  • 32