PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Obter o resultado da consulta na declaração DO


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 .