Як створити функцію, яка нічого не повертає


108

Я хочу написати функцію за допомогою pl/pgsql. Я використовую PostgresEnterprise Manager v3 і використовую оболонку для створення функції, але в оболонці я повинен визначити тип повернення. Якщо я не визначаю тип повернення, я не зможу створити функцію.

Як можна створити функцію без повернення результату, тобто функцію, яка створює нову таблицю?

Відповіді:


167

Використовуйте RETURNS voidяк нижче:

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
Для інших читачів зауважте, що #variable_conflictдиректива не має нічого спільного з рештою відповіді. Це лише частина прикладної функції; єдиний важливий біт - це RETURNS void. Крім того, здорово, я не знав, що PL / PgSQL мав прагми.
Крейг Рінгер

Ось відповідний випадок, що використовує #variable_conflict: dba.stackexchange.com/a/105828/3684
Ервін

1
Як я можу скористатися цією функцією всередині іншої функції? Якщо я пробую без SELECT * FROM stamp_user(...), то отримую, error: query has no destination for result dataа якщо просто пишу, stamp_user(...)то отримую syntax error.
бенкет

0

Функції завжди повинні щось повертати, хоча ви можете використовувати такі процедури

do $$

і почніть з нормальної функції, як

declare
...

але якщо ви все ще хочете виконувати функцію, просто додайте недійсність після повернення .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.