web-dev-qa-db-fra.com

La fonction avec requête SQL n'a pas de destination pour les données de résultat

J'essaie de créer une fonction qui renvoie un ensemble de résultats SELECTed. Lorsque j'appelle ma fonction postgres comme ceci select * from tst_dates_func() j'obtiens une erreur comme indiqué ci-dessous:

ERROR:  query has no destination for result data
HINT:  If you want to discard the results of a SELECT, use PERFORM instead.
CONTEXT:  PL/pgSQL function "tst_dates_func" line 3 at SQL statement

********** Error **********

ERROR: query has no destination for result data
SQL state: 42601
Hint: If you want to discard the results of a SELECT, use PERFORM instead.
Context: PL/pgSQL function "tst_dates_func" line 3 at SQL statement

Voici la fonction que j'ai créée:

CREATE OR REPLACE FUNCTION tst_dates_func() 
    RETURNS TABLE( date_value date, date_id int, date_desc varchar) as
$BODY$   
BEGIN
    select a.date_value, a.date_id, a.date_desc from dates_tbl a;
END;
$BODY$
      LANGUAGE plpgsql;

Je ne sais pas pourquoi j'obtiens l'erreur ci-dessus. Je voudrais exécuter select * from tst_dates_func(); et récupérer les données. Ou joignez davantage le jeu de résultats si nécessaire. Quel est le problème ici?

26
Horse Voice

Faites-le en tant que SQL simple

CREATE OR REPLACE FUNCTION tst_dates_func() 
    RETURNS TABLE( date_value date, date_id int, date_desc varchar) as
$BODY$   
    select a.date_value, a.date_id, a.date_desc from dates_tbl a;

$BODY$
      LANGUAGE sql;

Si vous avez vraiment besoin de plpgsql, utilisez return query

CREATE OR REPLACE FUNCTION tst_dates_func() 
    RETURNS TABLE( date_value date, date_id int, date_desc varchar) as
$BODY$   
BEGIN
    perform SELECT dblink_connect('remote_db');
    return query
    select a.date_value, a.date_id, a.date_desc from dates_tbl a;

END;
$BODY$
      LANGUAGE plpgsql;
37
Clodoaldo Neto