UPDATE स्टेटमेंट का सिंटैक्स है:
http://docs.oracle.com/cd/B19306_01 /server.102/b14200/statements_10007.htm
जहां dml_table_expression_clause
है:
कृपया ( subquery )
. पर ध्यान दें उपरोक्त सिंटैक्स का हिस्सा।
subquery
एक ऐसी सुविधा है जो जुड़ने का अद्यतन करने की अनुमति देती है।
सबसे सरल रूप में यह हो सकता है:
UPDATE (
subquery-with-a-join
)
SET cola=colb
किसी जॉइन को अपडेट करने से पहले, आपको यहां सूचीबद्ध प्रतिबंधों के बारे में पता होना चाहिए:
https://docs.oracle.com/cd/B28359_01 /server.111/b28286/statements_8004.htm
- एक सेट ऑपरेटर
- एक विशिष्ट ऑपरेटर
- एक समग्र या विश्लेषणात्मक कार्य
- एक ग्रुप बाय, ऑर्डर बाय, मॉडल, कनेक्ट बाय, या स्टार्ट विथ क्लॉज
- चयन सूची में एक संग्रह अभिव्यक्ति
- चयन सूची में एक उपश्रेणी
- केवल पढ़ने के लिए निर्दिष्ट एक उपश्रेणी
- कुछ अपवादों के साथ जुड़ता है, जैसा कि Oracle डेटाबेस एडमिनिस्ट्रेटर गाइड में प्रलेखित है
और अद्यतन करने योग्य दृश्यों से संबंधित सामान्य नियम भी - यहाँ (अनुभाग:Updating a Join View
):
http://docs .oracle.com/cd/B19306_01/server.102/b14231/views.htm#sthref3055
हम पहले शामिल होने के साथ एक सबक्वेरी बना सकते हैं:
SELECT age
FROM ages a
JOIN names m ON a.id = m.id
WHERE m.name = 'Sally'
यह क्वेरी केवल निम्नलिखित परिणाम लौटाती है:
AGE
----------
30
और अब हम अपनी क्वेरी को अपडेट करने का प्रयास कर सकते हैं:
UPDATE (
SELECT age
FROM ages a
JOIN names m ON a.id = m.id
WHERE m.name = 'Sally'
)
SET age = age + 1;
लेकिन हमें एक त्रुटि मिलती है:
इस त्रुटि का अर्थ है, कि उपरोक्त प्रतिबंधों में से एक पूरा नहीं हुआ है (कुंजी-संरक्षित तालिका)।
हालांकि अगर हम अपनी टेबल में प्राथमिक कुंजी जोड़ते हैं:
alter table names add primary key( id );
alter table ages add primary key( id );
तो अब अपडेट बिना किसी त्रुटि के काम करता है और अंतिम परिणाम है:
select * from ages;
ID AGE
---------- ----------
1 25
2 31
3 35