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


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 после возврата .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.