2009-08-27 9 views
12

मैं पोस्टग्रेज़ में एक साधारण संग्रहीत प्रक्रिया कैसे लिखूं जो एक मूल्य वापस नहीं करता है? जब भी मैं संग्रहीत प्रक्रिया को कॉल करता हूं तो शून्य शून्य रिटर्न प्रकार के साथ भी मुझे एक पंक्ति मिल जाती है।मैं पोस्टग्रेस संग्रहीत प्रक्रिया कैसे लिखूं जो कुछ भी वापस नहीं करता है?

CREATE FUNCTION somefunc(in_id bigint) RETURNS void AS $$ 
BEGIN 
    DELETE from test_table where id = in_id; 
END; 
$$ LANGUAGE plpgsql; 

उत्तर

7

यह समारोह है कि मान देता है नहीं है, यह SELECT आप इसे करने के लिए इस्तेमाल है। यदि यह किसी भी पंक्ति को वापस नहीं करता है, तो यह आपके कार्य को नहीं चलाता है।

4

आप बस ठीक कर रहे हैं। आपको कुछ और जोड़ने की ज़रूरत नहीं है।

पंक्ति का परिणाम शून्य है, इसलिए यह एक शून्य वापसी है।

मुझे नहीं लगता कि आप इसके बारे में कुछ कर सकते हैं। मेरे शून्य कार्यों की जांच करना वे सभी आपके जैसे ही हैं।

$$ के रूप में शून्य और कोड ब्लॉक में कोई वापसी विवरण नहीं देता है।

सरल समारोह:

create function x() returns setof record as $$ 
begin 
return; 
END; 
$$ language plpgsql; 

अब आप कर सकते हैं:

# select x(); 
x 
--- 
(0 rows) 

मामले में यह काम नहीं करता

+1

लेकिन यह कैसे कर सकते हैं उस विधि को बुलाया जा सकता है? – Peymankh

+0

चयन * void_function() से; –

+0

'PERFORM void_function();' का उपयोग करना शायद आसान है। – Cromax

6

आप प्राप्त कर सकते हैं सेट लौटने कार्यों कोस द्वारा "कुछ नहीं लौटे" आपके लिए (क्षमा करें, मैं 8.5 का उपयोग कर रहा हूं), इस दृष्टिकोण के साथ प्रयास करें:

# create function x (OUT o1 bool, OUT o2 bool) returns setof record as $$ 
begin 
return; 
END; 
$$ language plpgsql; 
CREATE FUNCTION 

मापदंडों अप्रासंगिक हैं, लेकिन:

  • आप की जरूरत है> उनमें से 1
  • वे

नामित किया जाना है और अब आप कर सकते हैं:

# select * from x(); 
o1 | o2 
----+---- 
(0 rows) 
संबंधित मुद्दे