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

DELETE के बाद सशर्त रूप से UPDATE/INSERT कैसे करें जो पंक्तियों को नहीं ढूंढता है?

अगर DELETE कोई योग्य पंक्ति नहीं मिलती है, इसकी RETURNING क्लॉज रिटर्न कोई पंक्ति नहीं

शीर्षक "सशर्त रूप से अद्यतन/हटाने के बाद सम्मिलित करें" . के लिए कहता है , लेकिन शरीर इसकी शिकायत करता है "विफल हो जाता है अगर हटाने के लिए कोई पंक्ति नहीं है" . यदि हटाने के लिए पंक्ति का अस्तित्व शर्त नहीं है, तो शर्त क्या है?

एक अंग पर बाहर जाने पर, यह हो सकता है आप जो चाहते हैं वह बनें:

CREATE FUNCTION updateoutfit(_id UUID, _title text DEFAULT NULL::text, _garments json)
  RETURNS TABLE (id UUID, title text, garments json)
  LANGUAGE sql AS
$func$
DELETE FROM outfit_garment WHERE outfit_id = _id;  -- DELETE if exists

INSERT INTO outfit (id, title)  -- UPSERT outfit
VALUES (_id, _title)
ON CONFLICT (id) DO UPDATE
SET    title = EXCLUDED.title;
   
WITH ins AS (  -- INSERT new rows in outfit_garment
   INSERT INTO outfit_garment (position_x, outfit_id)
   SELECT "positionX", _id
   FROM   json_to_recordset(_garments) AS x("positionX" float)  -- outfit_id UUID was unused!
   RETURNING json_build_object('positionX', position_x) AS garments
   )
SELECT _id, _title, json_agg(garments)
FROM   ins
GROUP  BY id, title;
$func$;

यह तालिका outfit_garment . से सभी पंक्तियों को हटा देता है दिए गए UUID के लिए, फिर या तो तालिका में एक पंक्ति डालें या अपडेट करें outfit , और अंत में तालिका में नई विवरण पंक्तियाँ जोड़ता है outfit_garment . कोई भी outfit_id _garments . में उत्तीर्ण पर ध्यान नहीं दिया जाता है।
फिर यह JSON मान में सभी कपड़ों को मिलाकर एक पंक्ति लौटाता है।



  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 कस्टम अपवाद?

  2. पोस्टग्रेज - दूसरे कॉलम के योग के परिणाम के आधार पर रकम की गणना

  3. एक सबक्वेरी में LIMIT के साथ एक क्वेरी को सरल बनाना और सबक्वायरी और बाहरी क्वेरी में डुप्लिकेट किए गए क्लॉज

  4. रेल मॉडल के साथ कई पोस्टग्रेएसक्यूएल स्कीमा का उपयोग करना

  5. डेटाबेस गति अनुकूलन:कई पंक्तियों वाली कुछ तालिकाएँ, या कुछ पंक्तियों वाली कई तालिकाएँ?