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

क्या ऑब्जेक्ट प्रकार की तालिका में चयन करना संभव है?

हां यह है। आपको अपने कॉलम को ऑब्जेक्ट के कंस्ट्रक्टर में लपेटना होगा और BULK COLLECT का उपयोग करना होगा SELECT . में विकल्प कथन:

CREATE OR REPLACE TYPE t_some_type AS OBJECT(f varchar2(10))
/

CREATE OR REPLACE TYPE t_some_table IS TABLE OF t_some_type
/

DECLARE
   v_some_table t_some_table;
BEGIN
   SELECT t_some_type (dummy)
   BULK   COLLECT INTO v_some_table
   FROM   DUAL;
END;

एक तरफ के रूप में, आपको यह भी सुनिश्चित करने की ज़रूरत है कि आप ऑब्जेक्ट विनिर्देश बनाते हैं, न कि केवल शरीर (जैसा कि आपके उदाहरण में है)।

SELECT . में कॉलम उसी क्रम में होना चाहिए जैसे वे ऑब्जेक्ट के कंस्ट्रक्टर में पाए जाते हैं। यदि आपने स्पष्ट रूप से एक कंस्ट्रक्टर को परिभाषित नहीं किया है, तो विनिर्देश में घोषित क्रम में प्रत्येक कॉलम के साथ एक स्पष्ट रूप से मौजूद है।

इस कार्यक्षमता का उपयोग करने का एकमात्र नकारात्मक पक्ष यह है कि बड़ी संख्या में पंक्तियों के परिणामस्वरूप भारी स्मृति उपयोग होगा। यदि आप बड़ी संख्या में पंक्तियों को संसाधित करने के लिए इसका उपयोग करने की अपेक्षा करते हैं, तो आपको LIMIT वाले लूप का उपयोग करना चाहिए खंड।

विनिर्देश में मिली कॉलम सूची के अतिरिक्त, एक स्पष्ट निर्माता निर्दिष्ट करना संभव है। कंस्ट्रक्टर के पास आपके द्वारा परिभाषित कोई भी इनपुट हो सकता है, इसलिए, जाहिर है, जब आप एक स्पष्ट कंस्ट्रक्टर का उपयोग करते हैं, तो आपको इसकी तर्क सूची का पालन करना होगा। यहां एक उदाहरण दिया गया है:

CREATE OR REPLACE TYPE t_some_type AS OBJECT
(
   f1 VARCHAR2 (10),
   CONSTRUCTOR FUNCTION t_some_type (p_length NUMBER, p_value VARCHAR2)
      RETURN SELF AS RESULT
);
/

CREATE OR REPLACE TYPE BODY t_some_type AS
   CONSTRUCTOR FUNCTION t_some_type (p_length NUMBER, p_value VARCHAR2)
      RETURN SELF AS RESULT IS
   BEGIN
      self.f1 := LPAD (p_value, p_length, p_value);
      RETURN;
   END t_some_type;
END;
/

CREATE OR REPLACE TYPE t_some_table IS TABLE OF t_some_type
/

DECLARE
   v_some_table t_some_table;
BEGIN
   --Explicit Constructor
   SELECT t_some_type (10, dummy)
   BULK   COLLECT INTO v_some_table
   FROM   DUAL;
   DBMS_OUTPUT.put_line (v_some_table (1).f1);

   --Implicit Constructor
   SELECT t_some_type (dummy)
   BULK   COLLECT INTO v_some_table
   FROM   DUAL;
   DBMS_OUTPUT.put_line (v_some_table (1).f1);
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. यूनिक्सटाइम को डेटाटाइम एसक्यूएल (ओरेकल) में कनवर्ट करें

  2. रेल मॉडलिंग:एचएबीटीएम को has_many में परिवर्तित करना:के माध्यम से

  3. स्प्रिंग डेटा जेपीए के साथ संग्रहित प्रक्रिया को कॉल करते समय सरणी में कैसे पास करें?

  4. Oracle:क्या 10g oracle क्लाइंट 11g सर्वर के साथ काम करता है?

  5. PL/SQL:संख्यात्मक या मान त्रुटि:वर्ण स्ट्रिंग बफ़र बहुत छोटा %ROWTYPE