VladimirZhid
@VladimirZhid
Нравится делать что-то интересное и полезное.

Как сохранить селект в переменную?

Всем мир!
И вопрос сразу таков:
В примере кода функции вы можете увидеть два `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$
  • Вопрос задан
  • 320 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега PostgreSQL
Седой и строгий
В SQL ноль, но взялись за хранимые процедуры? Смело!

Проблемы с объявлением переменных в блоке declare у вас потому, что вместо language sql стоит использовать language plpgsql. А после объявление переменной можно будет сделать
SELECT regexp_replace(_query, '\M', ':* ', 'gi') INTO some_var;
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы