PostgreSQL - état SQL: 42601 erreur de syntaxe

Je voudrais savoir comment utiliser une requête dynamique à l'intérieur d'une fonction. J'ai essayé des tas de façons, cependant, lorsque j'essaie de compiler ma fonction d'un message SQL 42601 est affiché.

Le code que j'utilise:

CREATE OR REPLACE FUNCTION prc_tst_bulk(sql text)
RETURNS TABLE (name text, rowcount integer) AS 
$$
BEGIN
  WITH v_tb_person AS (return query execute sql)
  select name, count(*) from v_tb_person where nome like '%a%' group by name
  union
  select name, count(*) from v_tb_person where gender = 1 group by name;
END     
$$ LANGUAGE plpgsql;

D'erreur les messages que je reçois:

ERROR:  syntax error at or near "return"
LINE 5:     WITH v_tb_person AS (return query execute sql)

J'ai essayé d'utiliser:

WITH v_tb_person AS (execute sql)

WITH v_tb_person AS (query execute)

WITH v_tb_person AS (return query execute)

Quel est le problème? Comment puis-je résoudre ce problème?

Une question liée à PostgreSQL équivalent de l'Oracle “bulk collect”

  • C'est clairement plpgsql de la syntaxe. Qu'est-ce que le [Oracle] balise fais ici?
  • Précédente question a propos de la traduction de PL/SQL vers PL/PgSQL, donc probablement porté que sur. J'ai enlevé l'étiquette.
  • Une chose qui peut être bien la peine d'essayer de la documentation. Beaucoup d'efforts sont consacrés à l'PostgreSQL (et PL/PgSQL) de la documentation. Dans ce cas, vous aurez envie de commencer avec Dynamique des déclarations dans PL/PgSQL.
InformationsquelleAutor Leandro | 2013-04-30