फ़ंक्शन कैसे बनाएँ जो कुछ भी नहीं लौटाता है


108

मैं एक फ़ंक्शन लिखना चाहता हूं pl/pgsql। मैं PostgresEnterprise Manager v3 का उपयोग कर रहा हूं और फ़ंक्शन बनाने के लिए शेल का उपयोग कर रहा हूं , लेकिन शेल में मुझे रिटर्न प्रकार को परिभाषित करना होगा। यदि मैं रिटर्न प्रकार को परिभाषित नहीं करता हूं, तो मैं फ़ंक्शन नहीं बना पा रहा हूं।

रिटर्न रिजल्ट के बिना फंक्शन कैसे बना सकते हैं, यानी एक ऐसा फंक्शन जो एक नया टेबल बनाता है?

जवाबों:


167

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। इसके अलावा, शांत, मुझे नहीं पता था कि पीएल / पीजीक्यूएल के पास प्रैगमास था।
क्रेग रिंगर

यहाँ एक संबंधित मामला बना है #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
पीर

0

फ़ंक्शंस को हमेशा कुछ वापस करना चाहिए, हालांकि आप प्रक्रियाओं का उपयोग कर सकते हैं

do $$

और सामान्य कार्य की तरह शुरू करें

declare
...

लेकिन अगर आप अभी भी एक फ़ंक्शन करना चाहते हैं तो रिटर्न के बाद शून्य जोड़ें ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.