अगर 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 मान में सभी कपड़ों को मिलाकर एक पंक्ति लौटाता है।