Cách tạo hàm không trả về


107

Tôi muốn viết một hàm với pl/pgsql. Tôi đang sử dụng PostgresEnterprise Manager v3 và sử dụng shell để tạo một hàm, nhưng trong shell, tôi phải xác định kiểu trả về. Nếu tôi không xác định kiểu trả về, tôi không thể tạo một hàm.

Làm thế nào có thể tạo một hàm mà không có kết quả trả về, tức là một Hàm tạo một bảng mới?

Câu trả lời:


167

Sử dụng RETURNS voidnhư dưới đây:

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
Đối với những độc giả khác, hãy lưu ý rằng #variable_conflictchỉ thị không liên quan gì đến phần còn lại của câu trả lời. Nó chỉ là một phần của một chức năng ví dụ; bit quan trọng duy nhất là RETURNS void. Ngoài ra, thật tuyệt, tôi không biết PL / PgSQL có pragmas.
Craig Ringer

Dưới đây là một liên quan sử dụng làm trường hợp #variable_conflict: dba.stackexchange.com/a/105828/3684
Erwin Brandstetter

1
Làm cách nào để sử dụng chức năng này bên trong chức năng khác? Nếu tôi cố gắng mà không có SELECT * FROM stamp_user(...), thì tôi nhận được error: query has no destination for result datavà nếu tôi chỉ viết stamp_user(...)thì tôi nhận được syntax error.
pir

0

Các hàm luôn phải trả về một cái gì đó, mặc dù bạn có thể sử dụng các thủ tục như

do $$

và bắt đầu với chức năng bình thường như

declare
...

nhưng nếu bạn vẫn muốn thực hiện một hàm chỉ cần thêm void sau khi trả về .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.