Я пытаюсь выполнить запросы SELECT в операторах PL / pgSQL IF, используя следующий код:
DO
$do$
DECLARE
query_type real;
arr real[] := array[1];
BEGIN
IF query_type = 1 THEN
RETURN QUERY
SELECT "Westminster".*
FROM "Westminster"
WHERE ("Westminster".intersects = false AND "Westminster".area <= 100);
ELSE IF query_type = 0 THEN
RETURN QUERY
SELECT "Westminster".*
FROM "Westminster";
END IF;
END
$do$
Однако я получаю следующую ошибку, ERROR: cannot use RETURN QUERY in a non-SETOF function
.
Кто-нибудь знает, как мне заставить работать приведенный выше код? Спасибо.
ОБНОВЛЕНИЕ: Это сработало для меня:
CREATE OR REPLACE FUNCTION my_function(query_type integer)
RETURNS SETOF "Westminster" LANGUAGE plpgsql as $$
BEGIN
IF query_type = 1 THEN
RETURN QUERY
SELECT "Westminster".*
FROM "Westminster"
WHERE ("Westminster".intersects = false AND "Westminster".area <= 100);
ELSIF query_type = 0 THEN
RETURN QUERY
SELECT "Westminster".*
FROM "Westminster";
END IF;
END;
$$;
Затем я вызвал функцию следующим образом:
SELECT * FROM my_function(1);