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

एक कस्टम तालिका के रूप में कई चुनिंदा बयानों का परिणाम कैसे वापस करें

आपके मामले में आप एक संग्रह को गतिशील रूप से पॉप्युलेट करने का प्रयास कर रहे हैं और एक ही संग्रह में परिणाम चाहते हैं। आपके मामले में एक ही लूप में ऐसा करना संभव नहीं है। जैसा कि @OldProgrammer द्वारा उल्लेख किया गया है, प्रदर्शन बिंदु से पाइपरो एक बेहतर समाधान होगा। नीचे डेमो देखें:

--सारणी और मान:

CREATE TABLE SOURCE_TAB(TAB_NAME VARCHAR2(100),   DESCRIPTION  VARCHAR2(100));
/

SELECT * FROM SOURCE_TAB;
/

INSERT INTO SOURCE_TAB VALUES('table1','some_desc1');
INSERT INTO SOURCE_TAB VALUES('table2','some_desc2');
/

CREATE TABLE TABLE1(COL1 NUMBER, COL2 NUMBER);
/

INSERT INTO TABLE1 VALUES(1,2);
INSERT INTO TABLE1 VALUES(3,4);
INSERT INTO TABLE1 VALUES(5,6);
/

Select * from TABLE1;
/

CREATE TABLE TABLE2(COL1 NUMBER, COL2 NUMBER);
/

INSERT INTO TABLE2 VALUES(7,8);
INSERT INTO TABLE2 VALUES(9,10);
INSERT INTO TABLE2 VALUES(11,12);
/

Select * from TABLE2;
/

--वस्तु निर्मित

--UDT 
CREATE OR REPLACE TYPE NEWLY_CREATED_TABLE_TYPE IS OBJECT (
     VALUE1                        NUMBER,
     VALUE2                        NUMBER
);
/

--Type of UDT
CREATE OR  TYPE NEWLY_CRTD_TYP AS TABLE OF NEWLY_CREATED_TABLE_TYPE;
/

--कार्य:

--Function
CREATE OR REPLACE FUNCTION MY_FUNCTION
     RETURN NEWLY_CRTD_TYP PIPELINED
AS
     CURSOR CUR_TAB
     IS
          SELECT *
            FROM SOURCE_TAB;

     RET_TAB_TYPE                  NEWLY_CRTD_TYP;
BEGIN
     FOR I IN CUR_TAB
     LOOP
          --Here i made sure that all the tables have col1 & col2 columns since you are using dynamic sql. 
          EXECUTE IMMEDIATE    'select  NEWLY_CREATED_TABLE_TYPE(COL1, COL2)  from '|| I.TAB_NAME
          BULK COLLECT INTO RET_TAB_TYPE;

          EXIT WHEN CUR_TAB%NOTFOUND;

          FOR REC IN 1 .. RET_TAB_TYPE.COUNT
          LOOP
               PIPE ROW (RET_TAB_TYPE (REC) );
          END LOOP;
     END LOOP;

     RETURN;
END;
/

आउटपुट:

    SQL>  Select *  from table(MY_FUNCTION);

    VALUE1     VALUE2
---------- ----------
         1          2
         3          4
         5          6
         7          8
         9         10
        11         12

6 rows selected.


  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 अंतर त्रुटि के साथ 2 दृष्टिकोण की कोशिश की

  2. किसी अन्य तालिका के स्तंभ मानों के साथ एक तालिका स्तंभ मान कैसे अद्यतन करें?

  3. ORA-01704:स्ट्रिंग शाब्दिक बहुत लंबा 'Oracle XMLTYPE कॉलम प्रकार में XML दस्तावेज़ सम्मिलित करते समय त्रुटि'

  4. Oracle 11g में किसी चुनिंदा क्वेरी में ऑफ़सेट कैसे जोड़ें?

  5. डेटटाइम जहां क्लॉज ओरेकल