2013-06-06 5 views
18

Sto tentando di creare una funzione che restituisce un gruppo di risultati SELEZIONATO. quando chiamo la mia Postgres funzione come questa select * from tst_dates_func() ottengo un errore come illustrato di seguito:La funzione con query SQL non ha destinazione per i dati dei risultati

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 

Qui è la funzione che ho creato:

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; 

io non sono sicuro perché sto ottenendo l'errore precedente . Vorrei eseguire select * from tst_dates_func(); e recuperare i dati. O unire ulteriormente il set di risultati, se necessario. Qual è il problema qui?

+0

Si prega di consultare gli esempi del manuale: http://www.postgresql.org/docs/current /static/plpgsql-control-structures.html#PLPGSQL-STATEMENTS-RETURNING e http://www.postgresql.org/docs/current/static/sql-createfunction.html#SQL-CREATEFUNCTION-EXAMPLES –

+0

LANGUAGE dovrebbe essere SQL, non dovrebbe? –

+0

Ho bisogno che sia la funzione plpgsql. Inoltre, dato che il linguaggio è SQL, avrei bisogno di inserire l'istruzione della query in stringa con le virgolette e non voglio farlo. –

risposta

31

farlo come SQL pianura

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; 

Se davvero bisogno di uso plpgsql 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

Grazie per la risposta. Devo anche stabilire un dblink all'interno della funzione. Prima di eseguire il set di risultati della query di reso. Quindi ecco qualcosa che vorrei aggiungere prima della clausola della query di ritorno e quando lo aggiungo, ottengo un errore simile a quello sopra menzionato. 'SELECT dblink_connect ('remote_db')' Come posso includerlo nella funzione di plpgsql sopra? Grazie in anticipo –

+0

@ImtiazAhmad Usa 'perform' come nella mia risposta modificata. –

+0

@Clodoaldo Neto, +1 grande !. – Meem

Problemi correlati