Come creare una funzione che non restituisce nulla


108

Voglio scrivere una funzione con pl/pgsql. Sto usando PostgresEnterprise Manager v3 e utilizzo la shell per creare una funzione, ma nella shell devo definire il tipo di ritorno. Se non definisco il tipo di ritorno, non sono in grado di creare una funzione.

Come si può creare una funzione senza restituire il risultato, cioè una funzione che crea una nuova tabella?

Risposte:


167

Usa RETURNS voidcome di seguito:

CREATE FUNCTION stamp_user(id int, comment text) RETURNS void AS $$
    #variable_conflict use_variable
    DECLARE
        curtime timestamp := now();
    BEGIN
        UPDATE users SET last_modified = curtime, comment = comment
          WHERE users.id = id;
    END;
$$ LANGUAGE plpgsql;

18
Per altri lettori, si noti che la #variable_conflictdirettiva non ha nulla a che fare con il resto della risposta. È solo una parte di una funzione di esempio; l'unica cosa importante è il file RETURNS void. Inoltre, bello, non sapevo che PL / PgSQL avesse pragmi.
Craig Ringer

Ecco un caso correlato che utilizza #variable_conflict: dba.stackexchange.com/a/105828/3684
Erwin Brandstetter

1
Come si utilizza questa funzione all'interno di un'altra funzione? Se provo senza SELECT * FROM stamp_user(...), ottengo error: query has no destination for result datae se scrivo solo stamp_user(...)allora ottengo syntax error.
pir

0

Le funzioni devono sempre restituire qualcosa, sebbene tu possa usare procedure come

do $$

e inizia con una normale funzione come

declare
...

ma se vuoi ancora eseguire una funzione aggiungi void dopo i ritorni .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.