Comment créer une fonction qui ne renvoie rien

108

Je veux écrire une fonction avec pl/pgsql. J'utilise PostgresEnterprise Manager v3 et j'utilise le shell pour créer une fonction, mais dans le shell, je dois définir le type de retour. Si je ne définit pas le type de retour, je ne peux pas créer de fonction.

Comment créer une fonction sans résultat de retour, c'est-à-dire une fonction qui crée une nouvelle table?

Kabi
la source

Réponses:

167

Utilisez RETURNS voidcomme ci-dessous:

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;
carré
la source
18
Pour les autres lecteurs, notez que la #variable_conflictdirective n'a rien à voir avec le reste de la réponse. C'est juste une partie d'une fonction d'exemple; le seul élément important est le RETURNS void. Aussi, cool, je ne savais pas que PL / PgSQL avait des pragmas.
Craig Ringer
Voici un cas connexe utilisant #variable_conflict: dba.stackexchange.com/a/105828/3684
Erwin Brandstetter
1
Comment utiliser cette fonction dans une autre fonction? Si j'essaye sans SELECT * FROM stamp_user(...), alors j'obtiens error: query has no destination for result dataet si j'écris juste, stamp_user(...)j'obtiens syntax error.
pir
0

Les fonctions doivent toujours renvoyer quelque chose, bien que vous puissiez utiliser des procédures comme

do $$

et commencez avec une fonction normale comme

declare
...

mais si vous voulez toujours faire une fonction, ajoutez simplement void après les retours .

David Climent
la source