Cómo crear una función que no devuelva nada

108

Quiero escribir una función con pl/pgsql. Estoy usando PostgresEnterprise Manager v3 y usando shell para hacer una función, pero en el shell debo definir el tipo de retorno. Si no defino el tipo de retorno, no puedo crear una función.

¿Cómo se puede crear una función sin resultado de retorno, es decir, una función que crea una nueva tabla?

Kabi
fuente

Respuestas:

167

Utilice RETURNS voidcomo a continuación:

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;
sqreept
fuente
18
Para otros lectores, tenga en cuenta que la #variable_conflictdirectiva no tiene nada que ver con el resto de la respuesta. Es solo parte de una función de ejemplo; lo único importante es el RETURNS void. Además, genial, no sabía que PL / PgSQL tenía pragmas.
Craig Ringer
Aquí hay un caso relacionado que utiliza #variable_conflict: dba.stackexchange.com/a/105828/3684
Erwin Brandstetter
1
¿Cómo hago uso de esta función dentro de otra función? Si lo intento sin SELECT * FROM stamp_user(...), obtengo error: query has no destination for result datay si escribo stamp_user(...), obtengo syntax error.
pir
0

Las funciones siempre deben devolver algo, aunque puede utilizar procedimientos como

do $$

y comenzar con una función normal como

declare
...

pero si aún desea hacer una función, simplemente agregue void después de las devoluciones .

David Climent
fuente