141 votes

Comment créer une fonction qui ne renvoie rien

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

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

222voto

sqreept Points 4646

Utilisez RETURNS void comme 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;

5voto

Evan Carroll Points 13420

PostgreSQL 11+ : PROCEDURE s

PostgreSQL 11 introduit PROCEDURE s qui sont essentiellement des fonctions qui ne renvoient rien, mais qui sont appelées avec CALL plutôt que SELECT ,

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

Comme ça,

=# CREATE PROCEDURE create_table_foo()
AS $$
  CREATE TABLE foo ( id int )
$$ LANGUAGE sql;

=# CALL create_table_foo();

=# \d foo;
                Table "public.foo"
 Column |  Type   | Collation | Nullable | Default 
--------+---------+-----------+----------+---------
 id     | integer |           |          |

1voto

Dakli Points 70

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

do $$

et commencer avec une fonction normale comme

declare
...

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X