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

Oracle 21c . में टाइप डेफिनिशन चेंज

एसक्यूएल*प्लस और पीएल/एसक्यूएल वर्षों से बाधाओं पर हैं - ऐसे मामले बहुत अधिक हैं जहां एसक्यूएल * प्लस का उपयोग करके किसी कार्य को कैसे किया जाता है, यह पीएल/एसक्यूएल में समान या समान कार्य को पूरा करने से भिन्न होता है। इसके अतिरिक्त पीएल/एसक्यूएल में डेटा प्रकार उपलब्ध हैं जो एसक्यूएल * प्लस में अनुपलब्ध हैं। Oracle संस्करण 21c SQL*प्लस प्रकार की परिभाषाओं में कुछ PL/SQL डेटा प्रकारों का उपयोग करने का एक तरीका प्रदान करता है, इस चेतावनी के साथ कि PL/SQL प्रकार लगातार नहीं रहेंगे। इसका क्या अर्थ है और इस प्रकार के नए-नए खज़ाने का उपयोग करने के बारे में कोई कैसे जाता है? आइए आगे की जांच करें और देखें कि हमें क्या मिलता है।

कुछ समय के लिए पीएल/एसक्यूएल और एसक्यूएल*प्लस दोनों में कुछ प्रकार के निर्माण में सिंटैक्स में बदलाव शामिल है - पीएल में दो तत्वों वाला एक प्रकार? एसक्यूएल एक रिकॉर्ड है, और एसक्यूएल * प्लस में उसी प्रकार का निर्माण एक ऑब्जेक्ट प्रकार बन जाता है। यह कुछ ऐसा है जो डेवलपर्स करने के आदी हो गए हैं। हालांकि अगर उन प्रकारों में पीएल/एसक्यूएल प्रकार (बूलियन, pls_integer, बाइनरी_इन्टेगर, इत्यादि) शामिल हैं, तो दुख की बात है कि एसक्यूएल * प्लस में उस आवश्यकता को पूरा करने का कोई आसान तरीका नहीं था। 21 सी तक। आइए एक उदाहरण देखें कि एसक्यूएल * प्लस टाइप परिभाषाओं में इस तरह के प्रकारों का उपयोग कैसे किया जा सकता है। मान लें, तर्क के लिए, SQL*Plus में बूलियन डेटाटाइप के साथ एक प्रकार की आवश्यकता है। 21c से पहले BOOLEAN डेटा प्रकार की नकल करने के लिए बहुत सारी कोडिंग करना आवश्यक होगा - 21c के साथ हम BOOLEAN को एक प्रकार के रूप में उपयोग कर सकते हैं, जब तक कि डेटाबेस डेटा को डिस्क पर बनाए रखने की कोशिश नहीं करता:

SQL> create or replace
  2  type  EMP_SAL_APPROVAL_FOR_PL as object
  3  (  e_num    number,
  4     e_nme    varchar2(35),
  5     new_sal      number,
  6     mgr_approve boolean
  7  ) not persistable ;
  8  /

Type created.

ऐसी वस्तु को रन टाइम पर बूलियन मान के साथ पीएल/एसक्यूएल प्रोग्राम यूनिट में पास किया जा सकता है और ओरेकल जानता है कि बूलियन मान वर्तमान संदर्भ के बाहर जारी नहीं रहना है। जैसा कि पहले कहा गया है कि यह बूलियन मूल्यों तक ही सीमित नहीं है; आइए PLS_INTEGER और BINARY_INTEGER दोनों को आज़माएँ:

SQL> create or replace
  2  type  EMP_SAL_APPROVAL_FOR_PL as object
  3  (  e_num     number,
  4     e_nme     varchar2(35),
  5     new_sal      number,
  6     mgr_approve boolean,
  6     old_sal   pls_integer,
  7     yrly_sal   binary_integer
  8  ) not persistable ;
  9  /

Type created.

कोई भी डेटा प्रकार जिसे SQL*Plus में कायम नहीं रखा जा सकता है, वह "स्थिर नहीं" निर्देश के कारण नहीं होगा, हालांकि उन्हें रन टाइम पर PL/SQL इकाई में पास किया जा सकता है।

यदि आप सोच रहे हैं कि क्या यह नेस्टेड टेबल और वेरिएज़ में उपयोग के लिए भी उपलब्ध है, तो इसका उत्तर हाँ है:

SQL> create or replace
  2  type i_array as
  3  varray(40) of (binary_integer)
  4  not persistable;
  5  /

Type created.

दुर्भाग्य से यह %TYPE संदर्भ (पीएल/एसक्यूएल कोडिंग के साथ एक प्रसिद्ध और अक्सर इस्तेमाल किया जाने वाला शॉर्टकट पीएल/एसक्यूएल कोड और उपयोग की गई तालिकाओं के बीच मिलान सुनिश्चित करने के लिए) का उपयोग करने की अनुमति नहीं देता है। /पी>

SQL> create or replace
  2  type  EMP_SAL_APPROVAL_FOR_PL as object
  3  (  e_num     emp.empno%type,
  4     e_nme     varchar2(35),
  5     new_sal      number,
  6     mgr_approve boolean,
  6     old_sal   pls_integer,
  7     yrly_sal   binary_integer
  8  ) not persistable ;
  9  /

Warning: Type created with compilation errors.

SQL>
SQL> show errors
Errors for TYPE EMP_SAL_APPROVAL_FOR_PL

LINE/COL ERROR
-------- -----------------------------------------------------
0/0      PL/SQL: Compilation unit analysis terminated
3/12     PLS-00201: identifier 'EMP.EMPNO' must be declared

Oracle ने "स्थिर नहीं" निर्देश के साथ एक महत्वपूर्ण कदम उठाया है, जिससे प्रोग्रामर PL/SQL डेटा प्रकारों को SQL*Plus प्रकार परिभाषाओं में उपयोग कर सकते हैं; यह, सबसे अधिक संभावना है, सीमित उपयोग या अपील होगी, इस तरह के निर्माणों द्वारा प्रतिनिधित्व किए गए डेटा को डेटाबेस में संग्रहीत नहीं किया जाएगा, लेकिन BOOLEAN, PL:S_INTEGER या BINARY_INTEGER मानों को SQL * प्लस से PL / SQL प्रोग्राम इकाइयों में पास करते समय यह कर सकता है SQL*Plus में इस तरह के प्रकार न होने के कारण होने वाली किसी भी प्रकार की बेमेल समस्या को समाप्त करें। और यह शायद पीएल/एसक्यूएल के साथ एसक्यूएल*प्लस कार्यात्मक संगतता के विस्तार में पहला कदम है।


  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. Oracle SQL डेवलपर 21.4.2 और SQLcl 21.4.1 अब उपलब्ध हैं

  3. PHP से Oracle डेटाबेस कैसे कनेक्ट करें

  4. Oracle डेटाबेस में NLS पैरामीटर्स के मानों की जाँच कैसे करें

  5. कैसे Oracle में नियमित अभिव्यक्ति से समूह निकालने के लिए?