2013-08-19 10 views
30

È il modo predefinito di chiamare una funzione select * from my_function()?Chiamare le funzioni con exec invece di selezionare

Lo chiedo perché ho costruito una funzione che non restituisce nulla, solo inserisce i dati in una tabella e (proveniente da un background di SQL Server) si "sente" strano chiamarlo con select * from...

ero aspettandosi qualcosa come exec my_function()

risposta

32

uso PERFORM dichiarazione - http://www.postgresql.org/docs/current/static/plpgsql-statements.html

a volte è utile per valutare un'espressione o query SELECT ma scartare il risultato, ad esempio quando si chiama una funzione che ha effetti collaterali ma nessun valore di risultato utile. Per fare questo in PL/pgSQL, usare la dichiarazione PERFORM

quindi è solo

DO $$ BEGIN 
    PERFORM my_function(); 
END $$; 
+12

'PERFORM' è valido solo in PL/PgSQL. Non puoi usarlo da solo. –

+0

sì, dovrebbe essere eseguito all'interno del blocco PL/PgSQL o in funzione, aggiornato –

14

Si utilizzerà from quando la funzione restituisce un set. Se la funzione restituisce void basta fare

select my_function(); 
27

Sì, questo è il modo standard, e sì è strano.

solito devi scrivere le funzioni che stored procedure e li richiama con il comando CALL o EXECUTE. PostgreSQL non supporta le stored procedure vere (set di risultati multipli, transazioni autonome e tutto il resto), tuttavia, solo le funzioni definite dall'utente calleble, solo sql.

Quindi la soluzione alternativa è SELECT function_name() utilizzando la sintassi dell'estensione PostgreSQL che omette FROM o SELECT 1 FROM function_name(); per essere (un po ') più standard.

Il driver ODBC, il driver JDBC, ecc. Capiscono la sintassi di escape {call func_name()} e la traducono automaticamente in uno SELECT sottostante.

Problemi correlati