Hiçbir şey döndürmeyen işlev nasıl oluşturulur


110

İle bir fonksiyon yazmak istiyorum pl/pgsql. Ben kullanıyorum PostgresEnterprise Yöneticisi v3 ve bir işlev yapmak için kabuk kullanarak, ama kabuk ben dönüş türü tanımlamanız gerekir. Dönüş türünü tanımlamazsam, bir işlev oluşturamam.

Dönüş sonucu olmayan bir fonksiyon, yani yeni bir tablo oluşturan bir Fonksiyon nasıl yaratılır?

Yanıtlar:


171

RETURNS voidAşağıdaki gibi kullanın :

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
Diğer okuyucular için, #variable_conflictdirektifin cevabın geri kalanıyla hiçbir ilgisi olmadığını unutmayın . Bu sadece örnek bir işlevin parçasıdır; önemli olan tek şey RETURNS void. Ayrıca, harika, PL / PgSQL'in pragmaları olduğunu bilmiyordum.
Craig Ringer

İşte aşağıdakileri kullanan ilgili bir vaka #variable_conflict: dba.stackexchange.com/a/105828/3684
Erwin Brandstetter

1
Bu işlevi başka bir işlevin içinde nasıl kullanabilirim? Olmadan denersem SELECT * FROM stamp_user(...), o zaman alırım error: query has no destination for result datave eğer yazarsam stamp_user(...)o zaman alırım syntax error.
pir

0

İşlevler her zaman bir şey döndürmelidir, ancak aşağıdaki gibi prosedürleri kullanabilirsiniz

do $$

ve normal işlevle başlayın.

declare
...

ancak yine de bir işlev yapmak istiyorsanız, dönüşlerden sonra void ekleyin .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.