डिफ़ॉल्ट रूप से, ORA_ROWSCN
ब्लॉक स्तर पर संग्रहित किया जाता है, पंक्ति स्तर पर नहीं। यह केवल पंक्ति स्तर पर संग्रहीत होता है यदि तालिका मूल रूप से ROWDEPENDENCIES
के साथ बनाई गई थी सक्षम। यह मानते हुए कि आप अपनी तालिका की कई पंक्तियों को एक ही ब्लॉक में फ़िट कर सकते हैं और आप APPEND
का उपयोग नहीं कर रहे हैं तालिका के मौजूदा उच्च जल चिह्न के ऊपर नया डेटा सम्मिलित करने का संकेत, आप संभवतः उन ब्लॉकों में नया डेटा सम्मिलित कर रहे हैं जिनमें पहले से ही कुछ मौजूदा डेटा है। डिफ़ॉल्ट रूप से, यह ORA_ROWSCN
. को बदलने वाला है ब्लॉक में प्रत्येक पंक्ति के कारण आपकी क्वेरी वास्तव में डाली गई पंक्तियों की तुलना में अधिक पंक्तियों की गणना करती है।
चूंकि ORA_ROWSCN
पिछली बार एक पंक्ति में डीएमएल होने पर केवल ऊपरी-बाउंड होने की गारंटी दी जाती है, यह निर्धारित करना अधिक सामान्य होगा कि आज CREATE_DATE
जोड़कर कितनी पंक्तियां डाली गईं तालिका में कॉलम जो डिफ़ॉल्ट रूप से SYSDATE
. पर है या SQL%ROWCOUNT
. पर भरोसा करने के लिए आपके INSERT
. के बाद भाग गया (यह मानते हुए, कि आप एक ही INSERT
. का उपयोग कर रहे हैं सभी पंक्तियों को सम्मिलित करने के लिए कथन)।
आम तौर पर, ORA_ROWSCN
. का उपयोग करते हुए और SCN_TO_TIMESTAMP
फ़ंक्शन एक समस्यात्मक तरीका होने जा रहा है जब एक पंक्ति डाली गई थी, भले ही तालिका ROWDEPENDENCIES
के साथ बनाई गई हो . ORA_ROWSCN
एक Oracle SCN देता है जो एक सिस्टम चेंज नंबर है। यह किसी विशेष परिवर्तन (यानी लेन-देन) के लिए एक विशिष्ट पहचानकर्ता है। जैसे, एक SCN और एक समय के बीच कोई सीधा संबंध नहीं है-- मेरा डेटाबेस आपके SCN को आपकी तुलना में एक लाख गुना अधिक तेज़ी से उत्पन्न कर सकता है और मेरा SCN 1 आपके SCN 1 से अलग हो सकता है। Oracle पृष्ठभूमि प्रक्रिया SMON
एक तालिका रखता है जो एससीएन मानों को अनुमानित टाइमस्टैम्प पर मैप करता है लेकिन यह केवल उस डेटा को सीमित समय के लिए बनाए रखता है-- अन्यथा, आपका डेटाबेस एक बहु-अरब पंक्ति तालिका के साथ समाप्त हो जाएगा जो एससीएन को टाइमस्टैम्प मैपिंग में संग्रहीत कर रहा था। यदि पंक्ति एक सप्ताह पहले (और सटीक सीमा डेटाबेस और डेटाबेस संस्करण पर निर्भर करती है) से अधिक डाली गई थी, SCN_TO_TIMESTAMP
SCN को टाइमस्टैम्प में बदलने में सक्षम नहीं होगा और एक त्रुटि लौटाएगा।