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

क्या Oracle 12 को SQL में स्थानीय संग्रह प्रकारों की समस्या है?

आगे के प्रयोगों में हमने पाया कि समस्याएँ जितनी सोची गई थीं, उससे कहीं अधिक गहरी हैं।

उदाहरण के लिए, पैकेज में उपयोग किए जाने वाले अलग-अलग तत्व buggy_report हम एक ORA-03113: end-of-file on communication channel प्राप्त कर सकते हैं स्क्रिप्ट चलाते समय (प्रश्न में)। यह t_id_table . के प्रकार को बदलकर किया जा सकता है करने के लिए VARRAY या TABLE .. INDEX BY .. . ऐसे कई तरीके और विविधताएं हैं जो हमें अलग-अलग अपवादों की ओर ले जाती हैं, जो इस पोस्ट के विषय से हटकर हैं।

एक और दिलचस्प बात यह है कि buggy_report . का संकलन समय पैकेज विनिर्देश में 25 सेकंड तक का समय लग सकता है, जब आम तौर पर इसमें लगभग 0.05 सेकंड लगते हैं। मैं निश्चित रूप से कह सकता हूं कि यह TYPE t_id_table . की उपस्थिति पर निर्भर करता है pipe_table में पैरामीटर समारोह घोषणा, और "लंबे समय तक संकलन" स्थापना मामलों के 40% में होता है। तो ऐसा लगता है कि local collection types in SQL हाल ही में संकलन के दौरान दिखाई देते हैं।

तो हम देखते हैं कि Oracle 12.1.0.2 में स्पष्ट रूप से SQL में स्थानीय संग्रह प्रकारों का उपयोग करने में एक बग है।

ORA-22163 get प्राप्त करने के लिए न्यूनतम उदाहरण और ORA-03113 अनुसरण कर रहे हैं। वहां हम वही मान लेते हैं buggy_report प्रश्न के अनुसार पैकेज।

-- produces 'ORA-03113: end-of-file on communication channel'
DECLARE   
  l_cur buggy_report.t_info_cur;

  FUNCTION get_it RETURN buggy_report.t_info_cur IS BEGIN RETURN buggy_report.get_cursor(); END;    
BEGIN
   l_cur := get_it();

   dbms_output.put_line('');
END;
/

-- produces 'ORA-22163: left hand and right hand side collections are not of same type'
DECLARE  
  l_cur buggy_report.t_info_cur;

  PROCEDURE hello IS BEGIN NULL; END;
BEGIN
  l_cur := buggy_report.get_cursor;

  -- comment `hello` and exception disappears
  hello;

  CLOSE l_cur;
END;
/


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. कोड पहले माइग्रेशन में कॉलम के लिए EF6 Oracle डिफ़ॉल्ट मान

  2. प्रति आईडी मानों की संख्या गिनें

  3. Oracle में PL SQL कोड कैसे लपेटें?

  4. ORA-00932:असंगत डेटाटाइप:अपेक्षित - CLOB मिला

  5. Oracle में, स्क्रिप्ट के माध्यम से सम्मिलित करने का तेज़ तरीका?