2013-06-06 10 views
18

Próbuję utworzyć funkcję, która zwraca SELECTed zestaw wyników. Kiedy wzywam moje postgres funkcja jak to select * from tst_dates_func() otrzymuję komunikat o błędzie, jak pokazano poniżej:Funkcja z zapytaniem SQL nie ma miejsca docelowego dla danych wynikowych

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 

Oto funkcja stworzyłem:

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; 

Nie jestem pewien, dlaczego otrzymuję powyższy błąd . Chciałbym uruchomić select * from tst_dates_func(); i odzyskać dane. Lub w razie potrzeby dołącz zestaw wyników. Jaki jest tutaj problem?

+0

Proszę zobacz przykłady w instrukcji: http://www.postgresql.org/docs/current /static/plpgsql-control-structures.html#PLPGSQL -STATEMENTS-RETURNING i http://www.postgresql.org/docs/current/static/sql-createfunction.html#SQL-CREATEFUNCTION-EXAMPLES –

+0

LANGUAGE powinno być SQL, czyż nie? –

+0

Potrzebuję go do funkcji plpgsql. Plus z językiem będącym SQL, musiałbym umieścić zapytanie zapytania w łańcuchu z cytatami i nie chcę tego robić. –

Odpowiedz

31

Zrób to jako zwykły SQL

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; 

Jeśli naprawdę potrzebujesz plpgsql korzystanie 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; 
+0

Dziękuję za odpowiedź. Muszę ustanowić dblink również w tej funkcji. Przed wykonaniem zestawu wyników zapytania zwrotnego. Oto coś, co chciałbym dodać przed klauzulą ​​zapytania zwrotnego, a kiedy to dodam, otrzymuję podobny błąd jak wyżej. 'SELECT dblink_connect ('remote_db')' Jak mogę uwzględnić to w powyższej funkcji plpgsql? Z góry dziękuję –

+0

@ImtiazAhmad Użyj 'wykonaj' jak w mojej edytowanej odpowiedzi. –

+0

@Clodoaldo Neto, +1 świetne !. – Meem

Powiązane problemy