Você não pode valores de retorno de um
DO
declaração. Crie uma função plpgsql em vez disso. Existem várias maneiras de definir o tipo de retorno com o
RETURNING
cláusula ou com OUT
parâmetros. Leia o manual sobre CREATE FUNCTION
. Existem várias maneiras de retornar valores da função. Leia o capítulo Retornando de uma função no manual.
Em particular, como você está tentando retornar linhas inteiras de uma tabela, você pode usar o tipo registrado da tabela para a declaração da função:
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;
Ligar:
SELECT * FROM foo ();
Ou tente uma pesquisa aqui no SO. Eu postei muitos exemplos de código relacionados .
Solução alternativa para DO
declaração
Se você não puder usar uma função, a única solução alternativa sensata com uma instrução DO é usar uma tabela temporária:
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;
As tabelas temporárias são descartadas automaticamente no final da sessão .