आप किसी अद्यतन में खंड के साथ उपयोग कर सकते हैं; आपको बस इसे सही जगह पर करना है:
UPDATE mytable
SET name = (WITH temp AS((SELECT 'abcd' AS oldvalue, 'defg' AS newvalue FROM dual) UNION
(SELECT .....) --About 300 lines of this, copied from Excel and then formatted into the SELECT statement
)
SELECT newvalue
FROM temp
WHERE mytable.name = temp.oldvalue);
हालांकि, आप शायद केवल उन पंक्तियों को अपडेट करना चाहते हैं जो अस्थायी सबक्वेरी में मौजूद हैं, इसलिए आपको एक अतिरिक्त जहां क्लॉज की आवश्यकता होगी:
UPDATE mytable
SET name = (WITH temp AS((SELECT 'abcd' AS oldvalue, 'defg' AS newvalue FROM dual) UNION
(SELECT .....) --About 300 lines of this, copied from Excel and then formatted into the SELECT statement
)
SELECT newvalue
FROM temp
WHERE mytable.name = temp.oldvalue)
WHERE EXISTS (WITH temp AS((SELECT 'abcd' AS oldvalue, 'defg' AS newvalue FROM dual) UNION
(SELECT .....) --About 300 lines of this, copied from Excel and then formatted into the SELECT statement
)
SELECT NULL
FROM temp
WHERE mytable.name = temp.oldvalue);
वैकल्पिक रूप से, MERGE स्टेटमेंट का उपयोग करें:
merge into mytable tgt
using (WITH temp AS((SELECT 'abcd' AS oldvalue, 'defg' AS newvalue FROM dual) UNION
(SELECT .....) --About 300 lines of this, copied from Excel and then formatted into the SELECT statement
)
SELECT mytable.rowid r_id,
temp.newvalue
FROM temp
inner join mytable on mytable.name = temp.oldvalue) src
on (tgt.rowid = src.r_id)
when matched then
update set tgt.name = src.newvalue;
एन.बी. आपको मर्ज स्टेटमेंट की स्रोत क्वेरी में वास्तविक तालिका में शामिल होना होगा क्योंकि आप उस कॉलम को अपडेट करने का प्रयास कर रहे हैं, जिस पर आप शामिल हो रहे हैं, जिसे आप मर्ज स्टेटमेंट में नहीं कर सकते हैं - इसलिए मैंने मर्ज में शामिल होने के लिए स्विच किया है mytable.rowid पर शामिल हों।
आपको यह देखने के लिए दोनों कथनों का परीक्षण करना होगा कि कौन सा आपके डेटा पर सबसे अधिक प्रदर्शन करता है।