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

REGEXP_REPLACE और PL/SQL के बिना UUID स्ट्रिंग बनाना

आप दुर्भाग्य से संख्या स्वरूपों में स्ट्रिंग अक्षर शामिल नहीं कर सकते हैं, अन्यथा आप हेक्स स्ट्रिंग को एक संख्या में परिवर्तित कर सकते हैं और फिर वापस वापस आ सकते हैं, सही स्थानों पर प्रारूप मास्क में अक्षर सम्मिलित कर सकते हैं - लेकिन आप केवल तिथियों के लिए ऐसा कर सकते हैं।

आप substr() . का उपयोग कर सकते हैं चूंकि पद निर्धारित हैं। आप चिंतित थे कि

<ब्लॉकक्वॉट>

जाहिर है कि मैं सबस्ट्र और कॉन्सटेनेशन का उपयोग नहीं कर सकता क्योंकि प्रत्येक SUBSTR एक अलग SYS_GUID को प्रोसेस करेगा।

सबक्वेरी फैक्टरिंग (उर्फ एक सामान्य टेबल एक्सप्रेशन/CTE) का उपयोग करने का अर्थ है substr() उस सीटीई से एक पंक्ति के लिए कॉल सभी एक ही GUID देखते हैं; यह विधि प्रत्येक के लिए एक नया SYS_GUID उत्पन्न नहीं करती है।

with t as (
  select rawtohex(sys_guid()) guid from dual
  connect by level <= 2
)
select guid, substr(guid, 1, 8)
  ||'-'|| substr(guid, 9, 4)
  ||'-'|| substr(guid, 13, 4)
  ||'-'|| substr(guid, 17, 4)
  ||'-'|| substr(guid, 21, 12) as formatted_guid
from t;

GUID                             FORMATTED_GUID                         
-------------------------------- ----------------------------------------
2F6BA62518F926D0E0534D49E50ABB46 2F6BA625-18F9-26D0-E053-4D49E50ABB46    
2F6BA62518FA26D0E0534D49E50ABB46 2F6BA625-18FA-26D0-E053-4D49E50ABB46    

यह बड़ी मात्रा में डेटा पर रेगेक्स से बहुत तेज़ है। लूप में 100000 मानों के साथ (पीएल/एसक्यूएल ब्लॉक में, लूप के अंदर कम से कम काम करना ताकि यह वास्तव में ठीक से मूल्यांकन कर सके, और dbms_utility.get_cpu_time का उपयोग कर सके। बीता हुआ समय जांचने के लिए) रेगेक्स संस्करण में लगभग 2.51 सेकंड लगते हैं, जबकि सबस्ट्रिंग संस्करण में लगभग 0.29 सेकंड लगते हैं। आपके सिस्टम को निश्चित रूप से अलग-अलग नंबर मिलेंगे, लेकिन यह अभी भी परिमाण के समान क्रम के बारे में होना चाहिए।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle शीर्ष 10 रिकॉर्ड चुनें

  2. 12c पहचान कॉलम

  3. मैं Oracle 11g में 2 तिथियों के बीच दिनों की संख्या कैसे प्राप्त कर सकता हूं?

  4. SQL सर्वर में Oracle लिंक्ड सर्वर बनाएं और कॉन्फ़िगर करें

  5. केवल बैकअप SQL स्कीमा?