sql >> Base de Datos >  >> RDS >> PostgreSQL

Obtenga el resultado de la consulta en la declaración DO

Usted no puede devolver valores de un DO declaración. Cree una función plpgsql en su lugar.

Hay varias formas de definir el tipo de devolución con RETURNING cláusula o con OUT parámetros Lea el manual sobre CREATE FUNCTION .

Hay varias formas de devolver valores desde la función. Lea el capítulo Volver desde una función en el manual.

En particular, dado que está tratando de devolver filas completas de una tabla, puede usar el tipo registrado de la tabla para la declaración de la función:

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;

Llamar:

SELECT * FROM foo ();

O intente una búsqueda aquí en SO. Publiqué muchos ejemplos de código relacionados .

Solución para DO declaración

Si no puede usar una función, la única solución medianamente sensata con una declaración DO es usar una tabla temporal:

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;

Las tablas temporales se eliminan automáticamente al final de la sesión .