PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

संग्रहीत प्रक्रिया से मूल्य कैसे वापस करें (फ़ंक्शन नहीं)?

अवधारणा का प्रमाण

एक PROCEDURE कर सकते हैं रिटर्न वैल्यू, लेकिन बहुत सीमित फैशन में (पोस्टग्रेज 13 के अनुसार)।

मैनुअल ऑन कॉल :

CREATE PROCEDURE पर मैनुअल :

तो आप 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)।

देखें:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL 9.0 . के साथ लोंडिस्ट प्रतिकृति

  2. स्तंभ के अंदर संग्रहीत JSON के आधार पर क्वेरी निष्पादित करें

  3. एकाधिक तालिकाओं में खोजें और परिणामी पंक्तियों में तालिका का नाम भी प्रदर्शित करें

  4. पोर्ट 5432 पर Postgresql से कनेक्ट नहीं हो सकता

  5. मेरे पोस्टग्रेस्क्ल डेटाबेस को केस असंवेदनशील संयोजन का उपयोग कैसे करें?