Как создать функцию, которая ничего не возвращает

109

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

Как создать функцию без возвращаемого результата, т.е. функцию, которая создает новую таблицу?

Каби
источник

Ответы:

170

Используйте, 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;
кврипт
источник
20
Для других читателей обратите внимание, что #variable_conflictдиректива не имеет ничего общего с остальной частью ответа. Это просто часть функции-примера; единственный важный бит - это RETURNS void. Кроме того, здорово, я не знал, что в PL / PgSQL есть прагмы.
Craig Ringer
Вот связанный с этим случай с использованием #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
...

но если вы все еще хотите выполнить функцию, просто добавьте void после возврата .

Дэвид Климент
источник