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

पीएल/एसक्यूएल में वर्तमान कहां है

इस ब्लॉक पर एक नज़र डालें:

DECLARE

    CURSOR c1 IS
    SELECT course_number, ROWID AS RID
    FROM courses_tbl
    FOR UPDATE;

begin

    FOR aCourse IN c1 LOOP

        UPDATE courses_tbl SET course_number = aCourse.course_number + 1 
        WHERE CURRENT OF c1;
        UPDATE courses_tbl SET course_number = aCourse.course_number + 1 
        WHERE ROWID = aCourse.RID

    end loop;

end;

दो अद्यतन विवरण समतुल्य हैं, WHERE CURRENT OF ... WHERE ROWID = ... . के लिए सिर्फ एक शॉर्टकट है , आप दोनों में से किसी का भी उपयोग कर सकते हैं।

वास्तव में आपका प्रश्न होना चाहिए "हमें FOR UPDATE ... की आवश्यकता क्यों है? ?" इसका कारण यह है कि ROWID अन्य ऑपरेशनों द्वारा बदल सकता है, जैसे ALTER TABLE ... SHRINK SPACE , चलती टेबलस्पेस या बड़े डीएमएल। FOR UPDATE पंक्ति को लॉक करता है, यानी यह सुनिश्चित करता है कि जब तक आप अपना लेन-देन पूरा नहीं कर लेते, तब तक ROWID नहीं बदलेगा।

नहीं, आप केवल लेन-देन पूरा करके ही ताला जारी कर सकते हैं, अर्थात ROLLBACK या COMMIT



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्या ऑरैकल में संग्रहित प्रक्रियाओं को निष्पादित करने के बाद कोई ऑटो कमिट होता है?

  2. एकाधिक डेटाबेस के अनुरूप ऑनलाइन SQL सिंटैक्स चेकर

  3. Android ऐप के माध्यम से OracleDB से कनेक्ट करना

  4. नेस्टेड टेबल पर Oracle ट्रिगर

  5. जब कोई परिणाम नहीं लौटाया जाता है तो ExecuteScalar () को संभालना