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

ओरेकल - अनुक्रम के बिना अनुक्रम

हालांकि मैं इसके खिलाफ दृढ़ता से अनुशंसा करता हूं (एक अनुक्रम का उपयोग करना पसंद करते हैं और केवल यह स्वीकार करते हैं कि अपेक्षित अंतराल से बड़ा होगा), आप अपनी खुद की छद्म-अनुक्रम तालिका बना सकते हैं

CREATE TABLE my_sequences (
  sequence_name VARCHAR2(30) PRIMARY KEY,
  sequence_val  NUMBER
);

कुछ पंक्तियाँ डालें

INSERT INTO my_sequences( sequence_name, sequence_val )
  VALUES( 'GroupA', 1 );
INSERT INTO my_sequences( sequence_name, sequence_val )
  VALUES( 'GroupB', 1 );

और फिर अगला अनुक्रम मान प्राप्त करने के लिए एक फ़ंक्शन लिखें

CREATE FUNCTION get_nextval( p_sequence_name IN VARCHAR2 )
  RETURN NUMBER
IS
  l_val NUMBER;
BEGIN
  SELECT sequence_val
    INTO l_val
    FROM my_sequences
   WHERE sequence_name = p_sequence_name
     FOR UPDATE;

  UPDATE my_sequences
     SET sequence_val = sequence_val + 1
   WHERE sequence_name = p_sequence_name;

  RETURN l_val;
END;

यह विशेष अनुक्रम के लिए तालिका में पंक्ति को तब तक लॉक कर देगा जब तक कि अगली पंक्ति को पुनर्प्राप्त करने वाला लेनदेन या तो वापस नहीं आ जाता है या वापस आ जाता है। यह ओरेकल अनुक्रमों का उपयोग करने की तुलना में आपके आवेदन की मापनीयता को मौलिक रूप से कम कर देगा, यह सुनिश्चित करके कि केवल एक सत्र किसी विशेष group_name के लिए एक पंक्ति सम्मिलित कर सकता है एक बार में-- अन्य अनुक्रम के लिए प्रतीक्षा करना बंद कर देंगे। यदि आपके पास अपेक्षाकृत कम संख्या में समवर्ती उपयोगकर्ताओं (या अपेक्षाकृत बड़ी संख्या में group_name वाला सिस्टम है। मान), जो आपको स्वीकार्य हो सकता है। लेकिन सामान्य तौर पर यह एक खराब अभ्यास है। ओरेकल संस्करण के आधार पर, आप समेकन बढ़ाने के लिए स्वायत्त लेनदेन का उपयोग करने में सक्षम हो सकते हैं लेकिन यह समाधान में केवल एक और जटिलता जोड़ता है। उस बिंदु पर जब आप वास्तव में मापनीयता के बारे में चिंतित हैं, तो आप वास्तव में संपूर्ण डिज़ाइन को पीछे धकेलना चाहते हैं और केवल Oracle अनुक्रम का उपयोग करना चाहते हैं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. केवल पिछले 3 महीनों का डेटा निकालने के लिए expdp में QUERY का उपयोग कैसे करें

  2. jpa . में किसी ऑब्जेक्ट को सहेजने से पहले मैं आईडी कैसे जानूं?

  3. पीएल/एसक्यूएल:क्या स्क्रिप्ट निष्पादन को पूरी तरह से रोकने के लिए कोई निर्देश है?

  4. sas में proc sql का उपयोग करके गोदाम (ओरेकल इंजन) से डेटा खींचते समय सरल यादृच्छिक नमूनाकरण

  5. SQLException प्राप्त करें java.sql.SQLException:ResultSet.next को कॉल नहीं किया गया था