Вие не можете връща стойности от DO
изявление. Вместо това създайте функция plpgsql.
Има няколко начина за дефиниране на типа връщане с RETURNING
клауза или с OUT
параметри. Прочетете ръководството за CREATE FUNCTION
.
Има няколко начина за връщане на стойности от функцията. Прочетете главата Връщане от функция в ръководството.
По-специално, тъй като се опитвате да върнете цели редове от таблица, можете да използвате регистрирания тип на таблицата за декларацията на функцията:
CREATE FUNCTION foo ()
RETURNING SETOF test_log
$func$
BEGIN
IF 'a' = 'a' THEN
RETURN QUERY
SELECT * FROM test_log LIMIT 10;
ELSE
RAISE WARNING $$Didn't work!$$;
END IF;
END
$func$ LANGUAGE plpgsql;
Обаждане:
SELECT * FROM foo ();
Или опитайте да търсите тук в SO. Публикувах много свързани примери за код .
Заобиколно решение за DO
изявление
Ако не можете да използвате функция, единственото половинчато разумно решение с израз DO е да използвате временна таблица:
CREATE TEMP TABLE tbl_tmp AS
SELECT * FROM test_log LIMIT 0;
$do$
BEGIN
IF 'a' = 'a' THEN
INSERT INTO tbl_tmp
SELECT * FROM test_log LIMIT 10;
ELSE
RAISE WARNING $$Didn't work!$$;
END IF;
END
$do$ LANGUAGE plpgsql;
SELECT * FROM tbl_tmp;
Временните таблици се премахват автоматично в края на сесията .