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 .