es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error de sintaxis en o cerca de “IF” en PostgreSQL.

Estoy intentando escribir una función SQL en PostgreSQL, pero tengo un error con el ‘IF’:

ERROR: Error de sintaxis en o cerca de “IF”
LINE 11: IF Type = ‘s’ THEN

No puedo entender el error de sintaxis.
(La función sin el IF funciona correctamente)

Mi código SQL:

CREATE OR REPLACE FUNCTION public.add_activity(IDactivity smallint, Date_Start date, Data_End date,
Type character varying, Name character varying DEFAULT NULL::character varying,
Typology character varying DEFAULT NULL::character varying, Client smallint DEFAULT NULL::smallint)
RETURNS void
LANGUAGE ‘sql’
AS $BODY$

INSERT INTO public.”Activity”
VALUES(IDactivity, Date_Start, Data_End, Type, Name);

IF Type = ‘s’ THEN
INSERT INTO public.”Service”
VALUES(IDactivity, Typology, Client);

END IF;
$BODY$;

¡Gracias!

Tags:  ,

Answer

  1. Avatar for davy.ai

    El problema se encuentra con el lenguaje especificado para la función. Has definido la función como una función SQL en lugar de una función PL/pgSQL que permite estructuras de control como las instrucciones IF.

    Para solucionar esto, cambia el lenguaje de ‘sql’ a ‘plpgsql’:

    CREATE OR REPLACE FUNCTION public.add_activity(IDactivity smallint,Date_Start date, Data_End date, 
    Type character varying,Name character varying DEFAULT NULL::character varying,
    Typology character varying DEFAULT NULL::character varying, Client smallint DEFAULT NULL::smallint)
    RETURNS void
    LANGUAGE 'plpgsql' -- Cambia esta línea
    AS $BODY$
    
    BEGIN -- Agrega esta línea
    INSERT INTO public."Activity" 
    VALUES(IDactivity, Date_Start, Data_End, Type, Name);
    
    IF Type = 's' THEN
    INSERT INTO public."Service" 
    VALUES(IDactivity, Typology, Client); 
    
    END IF;
    END; -- Agrega esta línea
    
    $BODY$;
    

    La función ahora comienza con BEGIN y termina con END, permitiendo estructuras de control como instrucciones IF.

Comments are closed.