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

अद्यतन के लिए और अद्यतन के लिए के बीच अंतर

Oracle प्रलेखन से :

यदि आपकी क्वेरी किसी एकल तालिका का संदर्भ देती है तो FOR UPDATE . के बीच कोई अंतर नहीं है और FOR UPDATE OF ... , लेकिन बाद वाला अभी भी स्व-दस्तावेजीकरण के रूप में उपयोगी हो सकता है यह इंगित करने के लिए कि आप किन कॉलमों को अपडेट करना चाहते हैं। हालांकि यह प्रतिबंधित नहीं करता है कि आप क्या अपडेट कर सकते हैं। अगर आपके पास है:

CURSOR cur IS SELECT * FROM emp FOR UPDATE OF sal;

तो आप अभी भी कर सकते हैं:

UPDATE emp SET comm = comm * 1.1 WHERE CURRENT OF cur;

लेकिन अगर एक से अधिक टेबल हैं तो FOR UPDATE OF ... केवल उन पंक्तियों को उन तालिकाओं में लॉक करेगा जिनमें आपके द्वारा निर्दिष्ट कॉलम शामिल हैं OF खंड।

मुझे लगता है कि आप इस प्रश्न में जो कह रहे हैं उसके विपरीत। निर्दिष्ट करना FOR UPDATE OF sal न केवल sal को लॉक करता है कॉलम; आप कभी भी एक कॉलम को लॉक नहीं कर सकते हैं, न्यूनतम लॉक पंक्ति स्तर पर है। (ताले के बारे में और पढ़ें ) यह तालिका में सभी पंक्तियों को लॉक कर देता है जिसमें SAL . होता है कॉलम, जो क्वेरी द्वारा चुने गए हैं।

आपके प्रश्न के अपडेट में, आपकी कर्सर क्वेरी emp . में शामिल हो रही है और dept , लेकिन OF खंड में केवल sal है , emp . में एक कॉलम मेज़। emp . में पंक्तियां जब कर्सर खोला जाएगा तो टेबल लॉक हो जाएगी, और जब तक आप commit या rollback वह सत्र। अपने कर्सर लूप में आप यह कर सकते हैं:

UPDATE emp SET ... WHERE CURRENT OF emp_cur;

... पंक्ति को emp . में अपडेट करने के लिए तालिका जो लूप के इस पुनरावृत्ति से संबंधित है। आप नहीं करो:

UPDATE dept SET ... WHERE CURRENT OF emp_cur;

... क्योंकि dept . में पंक्तियाँ टेबल लॉक नहीं हैं, क्योंकि OF . में कोई कॉलम नहीं था . इसका मतलब यह भी है कि आपके दूसरे सत्र में dept पंक्तियों को स्वतंत्र रूप से अपडेट किया जा सकता है, क्योंकि वे पहले सत्र तक लॉक नहीं हैं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PL/SQL संग्रह:Oracle डेटाबेस में नेस्टेड तालिका

  2. Oracle अनुप्रयोग एक्सप्रेस पर SQL के साथ प्रारंभ करना

  3. पीएल/एसक्यूएल में फाइल से बीएलओबी कैसे प्राप्त करें?

  4. Oracle to_date () गलत आउटपुट

  5. IPv6 के लिए रेगुलर एक्सप्रेशन (RegEx) IPv4 से अलग है