วิธีสร้างฟังก์ชันที่ไม่คืนค่าอะไร


108

ฉันต้องการเขียนฟังก์ชันด้วยpl/pgsql. ฉันใช้PostgresEnterprise Manager v3และใช้เชลล์เพื่อสร้างฟังก์ชัน แต่ในเชลล์ฉันต้องกำหนดประเภทผลตอบแทน ถ้าฉันไม่กำหนดประเภทการส่งคืนฉันจะไม่สามารถสร้างฟังก์ชันได้

จะสร้างฟังก์ชันที่ไม่มีผลตอบแทนได้อย่างไรเช่น Function ที่สร้างตารางใหม่

คำตอบ:


168

ใช้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;

18
สำหรับผู้อ่านคนอื่น ๆ โปรดทราบว่า#variable_conflictคำสั่งไม่มีส่วนเกี่ยวข้องกับคำตอบที่เหลือ เป็นเพียงส่วนหนึ่งของฟังก์ชันตัวอย่าง บิตที่สำคัญเพียงอย่างเดียวคือRETURNS void. เยี่ยมมากฉันไม่รู้ว่า PL / PgSQL มี pragmas
Craig Ringer

นี่คือกรณีที่เกี่ยวข้องโดยใช้#variable_conflict: dba.stackexchange.com/a/105828/3684
Erwin Brandstetter

1
ฉันจะใช้ฟังก์ชันนี้ในฟังก์ชันอื่นได้อย่างไร ถ้าลองได้โดยไม่ต้องSELECT * FROM stamp_user(...)แล้วฉันจะได้รับerror: query has no destination for result dataและถ้าฉันเพียงแค่เขียนแล้วฉันจะได้รับstamp_user(...) syntax error
pir

0

ฟังก์ชันต้องส่งคืนบางสิ่งเสมอแม้ว่าคุณจะสามารถใช้ขั้นตอนเช่น

do $$

และเริ่มต้นด้วยฟังก์ชันปกติเช่น

declare
...

แต่ถ้าคุณยังคงต้องการที่จะทำฟังก์ชั่นเพียงแค่เพิ่มเป็นโมฆะหลังจากที่ผลตอบแทน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.