अवधारणा का प्रमाण
एक PROCEDURE
कर सकते हैं रिटर्न वैल्यू, लेकिन बहुत सीमित फैशन में (पोस्टग्रेज 13 के अनुसार)।
तो आप INOUT
. का उपयोग करते हैं मोड सही है। लेकिन फंक्शन बॉडी में असाइनमेंट गायब है। और कुछ अन्य चीजें गलत/उप-इष्टतम हैं। मेरा सुझाव है:
CREATE OR REPLACE PROCEDURE public.spproductinsertupdatedelete(
_ser int
, _subcategid int
, _inrprice numeric
, _usdprice numeric
, _colour int
, _size int
, _qty int
, INOUT _prod_id int DEFAULT NULL
)
LANGUAGE plpgsql AS
$proc$
BEGIN
CASE _ser -- simpler than IF
WHEN 1 THEN -- INSERT
INSERT INTO product
(prod_subcateg_id, prod_inr_price, prod_usd_price, prod_colour, prod_size, prod_qty)
VALUES (_subcategid , _inrprice , _usdprice , _colour , _size , _qty )
RETURNING prod_id
INTO _prod_id; -- !!!
WHEN 2 THEN -- UPDATE
UPDATE product
SET (prod_subcateg_id, prod_inr_price, prod_usd_price, prod_size, prod_colour, prod_qty)
= (_subcategid , _inrprice , _usdprice , _size , _colour , _qty)
WHERE prod_id = _prod_id;
WHEN 3 THEN -- soft-DELETE
UPDATE product
SET prod_datetill = now()
WHERE prod_id = _prod_id;
ELSE
RAISE EXCEPTION 'Unexpected _ser value: %', _ser;
END CASE;
END
$proc$;
db<>fiddle यहां
इसे अवधारणा के प्रमाण के रूप में लें। लेकिन मुझे PROCEDURE<के उपयोग की गारंटी देने वाले प्रश्न में कुछ भी नहीं दिखता है। /कोड>
पहले स्थान पर।
आप शायद एक FUNCTION
चाहते हैं
एक फ़ंक्शन
मान वापस करने के लिए अधिक विकल्प प्रदान करता है, CALL
. के साथ अलग से चलाने की आवश्यकता नहीं है , और बड़े प्रश्नों में एकीकृत किया जा सकता है। संभावना है, कि आप पहली जगह में यही चाहते थे, और आपको व्यापक मिथ्या नाम "संग्रहीत प्रक्रिया" द्वारा गुमराह किया जा रहा था। देखें:
इसके अलावा, वर्तमान स्वरूप में, यदि आप किसी पंक्ति को अद्यतन या सॉफ्ट-डिलीट करना चाहते हैं तो आपको कई शोर पैरामीटर प्रदान करने होंगे। सादा SQL कमांड काम कर सकता है। या अलग कार्य ...
अंगूठे का नियम :यदि आपको भीतर से लेन-देन प्रबंधित करने की आवश्यकता नहीं है, तो संभवतः आप किसी प्रक्रिया के बजाय किसी फ़ंक्शन का उपयोग करना चाहते हैं। बाद में, कई परिणाम सेट (प्रति SQL मानक) को सक्षम करने और वापस करने के लिए पोस्टग्रेज प्रक्रियाओं को बढ़ाया जा सकता है, लेकिन अभी तक नहीं (पृष्ठ 13)।
देखें:
- PostgreSQL में, "संग्रहीत प्रक्रिया" और अन्य प्रकार के कार्यों में क्या अंतर है ?
- क्या पोस्टग्रेज में डेटाबेस लेनदेन में संग्रहीत कार्यविधियाँ चलती हैं?
- https ://www.2ndquadrant.com/hi/blog/postgresql-11-server-side-procedures-part-1/#comment-72
- “संग्रहीत कार्यविधियां” और “संग्रहीत कार्य” में क्या अंतर हैं?