PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Obtenir le résultat de la requête dans l'instruction DO

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 .