В SQL нет IF
, вы должны использовать language plpgsql
, если хотите. И чтобы вернуть значение, вам нужно использовать return
, а не returning
.
. Вам также не нужен оператор SELECT для доступа к значению столбца в строке, которую вы хотите обновить, просто ссылаться на столбец напрямую. Вы можете упростить ваши выражения CASE до простого coalesce ()
CREATE FUNCTION location."fn_updateInArea"(p_area_id integer, p_areaname text, p_pincode text)
RETURNS boolean
LANGUAGE plpgsql --<< Here
AS $BODY$
BEGIN
IF p_areaname IS NULL OR p_pincode IS NULL THEN
RETURN false; --<< use RETURN not RETURNING
ELSE
UPDATE location.areainfo
SET area_name = coalesce(p_areaname, area_name)
pin_code = coalesce(p_pincode, pin_code)
WHERE id=area_id
AND "deleteIndex"=false;
RETURN true;
END IF;
END;
$BODY$;
Я бы также настоятельно рекомендовал прекратить использование заключенных в кавычки идентификаторов, поскольку в долгосрочной перспективе это гораздо больше проблем, чем они того стоят.