Jak stworzyć funkcję, która nic nie zwraca

109

Chcę napisać funkcję z pl/pgsql. Używam PostgresEnterprise Manager v3 i używam powłoki do tworzenia funkcji, ale w powłoce muszę zdefiniować typ powrotu. Jeśli nie zdefiniuję typu zwracanego, nie mogę utworzyć funkcji.

Jak można stworzyć funkcję bez zwracania wyniku, tj. Funkcję, która tworzy nową tabelę?

Kabi
źródło

Odpowiedzi:

170

Użyj RETURNS voidjak poniżej:

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
źródło
20
Dla innych czytelników zwróć uwagę, że #variable_conflictdyrektywa nie ma nic wspólnego z resztą odpowiedzi. To tylko część przykładowej funkcji; jedyną ważną rzeczą jest RETURNS void. Poza tym fajnie, nie wiedziałem, że PL / PgSQL ma pragmy.
Craig Ringer
Oto powiązany przypadek wykorzystujący #variable_conflict: dba.stackexchange.com/a/105828/3684
Erwin Brandstetter.
1
Jak korzystać z tej funkcji w innej funkcji? Jeśli spróbuję bez SELECT * FROM stamp_user(...), to dostaję, error: query has no destination for result dataa jeśli po prostu napiszę, stamp_user(...)to otrzymam syntax error.
pir
0

Funkcje muszą zawsze coś zwracać, chociaż możesz użyć takich procedur, jak

do $$

i zacznij od normalnej funkcji, takiej jak

declare
...

ale jeśli nadal chcesz wykonać funkcję, po prostu dodaj void po zakończeniu zwracania .

David Climent
źródło