Vous ne pouvez pas renvoie les valeurs d'un DO
déclaration. Créez plutôt une fonction plpgsql.
Il existe plusieurs façons de définir le type de retour avec le RETURNING
clause ou avec OUT
paramètres. Lisez le manuel sur CREATE FUNCTION
.
Il existe plusieurs façons de renvoyer des valeurs à partir de la fonction. Lire le chapitre Revenir d'une fonction dans le manuel.
En particulier, puisque vous essayez de renvoyer des lignes entières à partir d'une table, vous pouvez utiliser le type enregistré de la table pour la déclaration de la fonction :
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;
Appel :
SELECT * FROM foo ();
Ou essayez une recherche ici sur SO. J'ai posté beaucoup exemples de code associés .
Solution de contournement pour DO
déclaration
Si vous ne pouvez pas utiliser une fonction, la seule solution à mi-chemin avec une instruction DO consiste à utiliser une table temporaire :
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;
Les tables temporaires sont supprimées automatiquement à la fin de la session .