Como criar uma função que não retorna nada


107

Quero escrever uma função com pl/pgsql. Estou usando o PostgresEnterprise Manager v3 e usando o shell para fazer uma função, mas no shell devo definir o tipo de retorno. Se eu não definir o tipo de retorno, não poderei criar uma função.

Como posso criar uma função sem retornar resultado, ou seja, uma Função que cria uma nova tabela?

Respostas:


167

Use RETURNS voidcomo abaixo:

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
Para outros leitores, observe que a #variable_conflictdiretiva não tem nada a ver com o resto da resposta. É apenas parte de uma função de exemplo; a única parte importante é o RETURNS void. Além disso, legal, eu não sabia que o PL / PgSQL tinha pragmas.
Craig Ringer

Aqui está um caso relacionado que usa #variable_conflict: dba.stackexchange.com/a/105828/3684
Erwin Brandstetter

1
Como faço para usar esta função dentro de outra função? Se eu tentar sem SELECT * FROM stamp_user(...), entendo, error: query has no destination for result datae se apenas escrever stamp_user(...), entendo syntax error.
pir

0

As funções devem sempre retornar algo, embora você possa usar procedimentos como

do $$

e comece com a função normal como

declare
...

mas se você ainda quiser fazer uma função, basta adicionar void após retornar .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.