Всем мир!
И вопрос сразу таков:
В примере кода функции вы можете увидеть два `SELECT ... AS _query` и естественно так делать нельзя; Помогите правильно преобразовать агрумент функции `_query` для дальнейшей работы с ним в запросе;
В SQL полный ноль и трогаю его только в крайней необходимости, пробовал объявить переменные через `DECLARE` но постоянно на что-то ругается интерпретатор(если так можно сказать)
СУБД postgresql
Заранее большое спасибо!)
CREATE OR REPLACE FUNCTION public.search_movies(_query character varying)
RETURNS TABLE(id bigint, _table character varying, nameru character varying, nameen character varying, image text)
LANGUAGE sql
AS $function$
SELECT regexp_replace(_query, '\M', ':* ', 'gi') AS _query;
SELECT regexp_replace(_query, '\M\:\*(?=(\s+?|)\m)', ':* | ', 'gi') AS _query;
SELECT *
FROM (
(
SELECT
id,
'movie' AS _table,
nameru,
nameen,
CAST(posters AS TEXT) AS image
FROM movies
WHERE tsv @@ to_tsquery('ru', _query)
LIMIT 10
)
UNION
(
SELECT
id,
'staff' AS _table,
staff_name,
staff_name_en,
CAST(staff_photo AS TEXT) AS image
FROM movie_staff
WHERE tsv @@ to_tsquery('ru', _query)
LIMIT 10
)
) t
ORDER BY
CASE
WHEN _table = 'movie'
THEN 1
WHEN _table = 'staff'
THEN 2
ELSE 3
END;
$function$