So erstellen Sie eine Funktion, die nichts zurückgibt

107

Ich möchte eine Funktion mit schreiben pl/pgsql. Ich verwende PostgresEnterprise Manager v3 und verwende Shell, um eine Funktion zu erstellen, aber in der Shell muss ich den Rückgabetyp definieren. Wenn ich den Rückgabetyp nicht definiere, kann ich keine Funktion erstellen.

Wie kann eine Funktion ohne Rückgabeergebnis erstellt werden, dh eine Funktion, die eine neue Tabelle erstellt?

Kabi
quelle

Antworten:

166

Verwenden Sie RETURNS voidwie unten:

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
quelle
18
Beachten Sie für andere Leser, dass die #variable_conflictRichtlinie nichts mit dem Rest der Antwort zu tun hat . Es ist nur ein Teil einer Beispielfunktion. Das einzig wichtige ist das RETURNS void. Außerdem wusste ich nicht, dass PL / PgSQL Pragmas hat.
Craig Ringer
Hier ist ein verwandter Fall, der Folgendes nutzt #variable_conflict: dba.stackexchange.com/a/105828/3684
Erwin Brandstetter
1
Wie nutze ich diese Funktion innerhalb einer anderen Funktion? Wenn ich es ohne versuche SELECT * FROM stamp_user(...), bekomme ich error: query has no destination for result dataund wenn ich nur schreibe, stamp_user(...)bekomme ich syntax error.
Pir
0

Funktionen müssen immer etwas zurückgeben, obwohl Sie Prozeduren wie verwenden können

do $$

und beginne mit normaler Funktion wie

declare
...

Wenn Sie dennoch eine Funktion ausführen möchten, fügen Sie nach der Rückgabe einfach void hinzu .

David Climent
quelle