2011-12-09 15 views
6

मैं पीएलएसक्यूएल से परिचित नहीं हूं, हालांकि मुझे किसी कार्य के लिए थोक सम्मिलन करना है।ओरेकल थोक डालने

मूल रूप से मुझे एक कॉलम प्राप्त करने के लिए तालिका एक से पूछना होगा और फिर इसे सम्मिलित करने के लिए इसे एक अलग तालिका पर उपयोग करना होगा। कुछ इस तरह:

for (ids in a file As cur_id) 
{ 
Select DISTINCT column1 As col1_list from table1 where id=cur_id 

for (cols in col1_list as cur_col) 
    Insert into table2 values ('cur_id','cur_col','214','234','first 3 chars of cur_col') 
} 

अब, मैं फाइल में चारों ओर 4k + आईडी है और प्रत्येक आईडी अलग col1 के विभिन्न रेंज होगा: मैक्स: 165 मिलियन, न्यूनतम ~ 2k

मैं इस लक्ष्य को हासिल करने के लिए कोशिश कर रहा हूँ "एक मेज से पढ़ें और अन्य का उपयोग करके बल्क डालने में डालने", यह ठीक है अगर यह रात भर चलता है आदि

मैं कुछ शोध ऑनलाइन से इस स्क्रिप्ट मिल गया:

CREATE OR REPLACE PROCEDURE test_proc 
IS 
TYPE TObjectTable IS TABLE OF ALL_OBJECTS%ROWTYPE; 
ObjectTable$ TObjectTable; 

BEGIN 
    SELECT * BULK COLLECT INTO ObjectTable$ 
    FROM ALL_OBJECTS; 

    FORALL x in ObjectTable$.First..ObjectTable$.Last 
    INSERT INTO t1 VALUES ObjectTable$(x) ; 
END; 

मैं लगता है कि यह मेरे मामले में उपयोगी हो सकता है, लेकिन मैं अर्थशास्त्र को काफी समझ नहीं पा रहा हूं। मैं कॉलम 1 का उल्लेख कहां करूं ... सम्मिलित मानों के लिए भी ऑब्जेक्टटेबल $ (x) मानों (.., .., ..) के इन्सेटेड के रूप में व्यक्त किया जाता है।

क्या कोई मुझे स्क्रिप्ट समझा सकता है और मेरे उदाहरण में तालिका 1, तालिका 2, col1, ids आदि चर का उपयोग करके इसे मेरे उपयोग मामले में संशोधित करने में मेरी सहायता कर सकता है।

डीबी 10 जी

धन्यवाद!

+0

क्या ":: अधिकतम 165 मिलियन, न्यूनतम ~ 2k अलग col1 की सीमा" से मेल खाता बनाने के क्या मतलब है? तालिका 1 और तालिका 2 के कॉलम का बेहतर वर्णन करें। – Codo

उत्तर

5

आपको थोक संग्रह की आवश्यकता नहीं है। बिल्ली, आपको पीएल/एसक्यूएल की भी आवश्यकता नहीं है - एसक्यूएल थोक सम्मिलन भी कर सकता है! माना जाता

बस एक राय यह है कि अपने लक्ष्य तालिका के% rowtype

create view v_Table1_Table2 as 
(select id, 
      max(case when /* condition for column1 */ 
        then /* expression for column1 */ 
        else null; 
       end) as column1, 
      max(case when /* condition for column2 */ 
        then /* expression for column2 */ 
        else null; 
       end) as column2, 
      max(case when /* condition for column3 */ 
        then /* expression for column3 */ 
        else null; 
       end) as column3 
    from  table1 
    group by id 
) 

तो

insert into table2 (select * from v_Table1_Table2 where id = :cur_id); 
संबंधित मुद्दे