2012-07-31 19 views
9

मैं यह नहीं समझ सकता कि तालिका में बड़ी मात्रा में डेटा कैसे रखा जाए। डेटा को दोहराया नहीं जाना चाहिएतालिका डेटाबेस में 1 मिलियन यादृच्छिक पंक्ति कैसे डालें Oracle

सलाह, अन्य तरीकों से हो सकता है?

create table COUNTRIES (
    COUNTRY_ID VARCHAR2(7), 
    COUNTRY_NAME VARCHAR2(40), 
    constraint COUNTRY_C_ID_PK primary key (COUNTRY_ID) 
); 


Begin 
For IDS in 1..1000000 
Loop 
INSERT INTO "SYSTEM"."COUNTRIES" (COUNTRY_ID, COUNTRY_NAME) VALUES (dbms_random.string('L', 7), dbms_random.string('L', 15)); 
Commit; 
End loop; 
End; 
+9

आप चाहिए *** नहीं *** 'SYSTEM' खाते में टेबल बना (और आप चाहिए नहीं * जब तक आपके कर डीबीए काम प्रणाली खाते के साथ काम *) –

+0

इस, उदाहरण है, लेकिन धन्यवाद के लिए सलाह –

उत्तर

24

तुम सिर्फ डेटा की मात्रा चाहते हैं और सामग्री की अनियमितता के बारे में परवाह नहीं करते हैं,

insert into countries select rownum, 'Name'||rownum from dual 
    connect by rownum<=1000000; 

चाल करना चाहिए।

+0

समस्या के तथ्य में। सभी डेटा यादृच्छिक होना चाहिए और –

+0

दोहराया नहीं जा सकता है इस समाधान में कोई दोहराव नहीं है। प्रत्येक मान अद्वितीय होगा और इसलिए आपके डेटा मॉडल में फिट होगा। प्राथमिक कुंजी उत्पन्न करने के लिए आप DBMS_RANDOM का उपयोग नहीं कर सकते हैं। – APC

+2

यदि आप इसे और अधिक यादृच्छिक चाहते हैं, तो आप 'dbms_random' से यादृच्छिक स्ट्रिंग के साथ' rownum' (निश्चित रूप से अद्वितीय) को जोड़ सकते हैं। –

6

आप डुप्लिकेट को अनदेखा करने के लिए अपवाद का उपयोग कर सकते हैं, और एक लाख नई पंक्तियों तक डालने जारी रख सकते हैं।

यह विधि बहुत धीमी होगी। यदि आपको यह कई बार करने की आवश्यकता है, या बड़ी मात्रा में डेटा के लिए, तो आप शायद "यादृच्छिक" की अपनी परिभाषा को आराम करना चाहेंगे और एएमएमक्यू जैसे समाधान का उपयोग करना चाहेंगे।

--Create temporary unique constraint. (Assuming you want each column to be unique?) 
alter table countries add constraint countries_name_uq unique (country_name); 

--Insert random data until it worked 1 million times. 
Declare 
    rows_inserted number := 0; 
Begin 
    Loop 
     Begin 
      INSERT INTO COUNTRIES(COUNTRY_ID, COUNTRY_NAME) 
      VALUES(dbms_random.string('L', 7), dbms_random.string('L', 15)); 
      --Only increment counter when no duplicate exception 
      rows_inserted := rows_inserted + 1; 
     Exception When DUP_VAL_ON_INDEX Then Null; 
     End; 
     exit when rows_inserted = 1000000; 
    End loop; 
    commit; 
End; 
/

--Drop the temporary constraint 
alter table countries drop constraint countries_name_uq; 

--Double-check the count of distinct rows 
select count(*) from 
(
    select distinct country_id, country_name from countries 
); 

Result 
------ 
1000000 
संबंधित मुद्दे