Cara membuat fungsi yang tidak mengembalikan apa pun

108

Saya ingin menulis fungsi dengan pl/pgsql. Saya menggunakan PostgresEnterprise Manager v3 dan menggunakan shell untuk membuat fungsi, tetapi di shell saya harus mendefinisikan tipe pengembalian. Jika saya tidak menentukan tipe pengembalian, saya tidak dapat membuat fungsi.

Bagaimana cara membuat fungsi tanpa hasil kembali, yaitu Fungsi yang membuat tabel baru?

Kabi
sumber

Jawaban:

167

Gunakan RETURNS voidseperti di bawah ini:

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
sumber
18
Untuk pembaca lain, perhatikan bahwa #variable_conflictarahan tidak ada hubungannya dengan jawaban lainnya. Itu hanya bagian dari fungsi contoh; satu-satunya bagian yang penting adalah RETURNS void. Juga, keren, saya tidak tahu PL / PgSQL memiliki pragma.
Craig Ringer
Berikut adalah kasus terkait yang menggunakan #variable_conflict: dba.stackexchange.com/a/105828/3684
Erwin Brandstetter
1
Bagaimana cara menggunakan fungsi ini di dalam fungsi lain? Jika saya mencoba tanpa SELECT * FROM stamp_user(...), maka saya mendapatkan error: query has no destination for result datadan jika saya hanya menulis stamp_user(...)maka saya dapat syntax error.
pir
0

Fungsi harus selalu mengembalikan sesuatu, meskipun Anda dapat menggunakan prosedur seperti

do $$

dan mulai dengan fungsi normal seperti

declare
...

tetapi jika Anda masih ingin melakukan suatu fungsi cukup tambahkan void setelah pengembalian .

David Climent
sumber