I am new to writing functions on postgres. So I was trying to write a function that checks if a row exists. If it exists then it returns the row with a flag 'Exists', else it inserts a row and returns it with a flag 'New'.
But I am facing a simple syntax error which I am not able to find out.
ERROR: syntax error at or near "IF" LINE 11: IF EXISTS ( ^ SQL state: 42601 Character: 208
This is the sql function.
CREATE FUNCTION create_food_type (
foodTypeName TEXT,
foodTypeIsActive BOOLEAN,
foodTypeCreatedBy INT,
foodTypeModifiedBy INT
)
RETURNS TABLE (operation TEXT, result JSON)
LANGUAGE SQL
AS $$
BEGIN
IF EXISTS (
SELECT *
FROM "FoodType"
WHERE "FoodTypeName" = foodTypeName
) THEN
-- Return the existing row and flag indicating row already exists
RETURN QUERY (
SELECT 'existing' AS operation, json_build_object(
'FoodTypeId', "FoodTypeID",
'FoodTypeName', "FoodTypeName",
'FoodTypeIsActive', "FoodTypeIsActive",
'FoodTypeCreatedDate', "FoodTypeCreatedDate",
'FoodTypeCreatedBy', "FoodTypeCreatedBy",
'FoodTypeModifiedDate', "FoodTypeModifiedDate",
'FoodTypeModifiedBy', "FoodTypeModifiedBy"
)
FROM "FoodType"
WHERE "FoodTypeName" = foodTypeName
LIMIT 1
);
ELSE
-- Insert a new row and return the newly inserted row and flag indicating new row added
RETURN QUERY (
INSERT INTO "FoodType" ("FoodTypeName", "FoodTypeIsActive", "FoodTypeCreatedDate", "FoodTypeCreatedBy", "FoodTypeModifiedDate", "FoodTypeModifiedBy")
VALUES (foodTypeName, foodTypeIsActive, CURRENT_TIMESTAMP, foodTypeCreatedBy, CURRENT_TIMESTAMP, foodTypeModifiedBy)
RETURNING 'new' AS operation, json_build_object(
'FoodTypeId', "FoodTypeID",
'FoodTypeName', "FoodTypeName",
'FoodTypeIsActive', "FoodTypeIsActive",
'FoodTypeCreatedDate', "FoodTypeCreatedDate",
'FoodTypeCreatedBy', "FoodTypeCreatedBy",
'FoodTypeModifiedDate', "FoodTypeModifiedDate",
'FoodTypeModifiedBy', "FoodTypeModifiedBy"
)
);
END IF;
END;
$$;
I have tried CASE WHEN as well.
IF EXISTS (
SELECT *
FROM "FoodType"
WHERE "FoodTypeName" = foodTypeName
) THEN
--Do Something
ELSE
--Do Something
END IF;
Even this throws the same error at 'CASE'