2011-04-20 13 views
10

मैं अपने आवेदन के लिए DevArt के dotConnect और Entity डेवलपर का उपयोग कर रहा हूं। मैंने एंटिटी-फर्स्ट फीचर का उपयोग करके टेबल बनाए हैं।सीएलओबी बनाम VARCHAR2 और क्या अन्य विकल्प हैं?

मुझे पता है कि कई स्तंभ प्रकार CLOB पर सेट हैं। मुझे केवल MySQL और Microsoft SQL सर्वर के साथ अनुभव है, इसलिए मुझे एप्लिकेशन के लिए CLOB का उपयोग करने के बारे में निश्चित नहीं है। मैंने कुछ पढ़ा, और पाया कि सीएलओबी डेटा के बड़े हिस्से के लिए हैं।

प्रश्न हैं:

  1. जैसे उपयोगकर्ता का लिंग या पूरा नाम, संभव है (जो एक varchar (1) होना चाहिए) के रूप में सबसे क्षेत्रों के लिए CLOB का उपयोग कर रहा है,? सीएलओबी फ़ील्ड को VARCHAR2 में बदलने के लिए कदमों को कॉलम को छोड़कर उसे फिर से बनाने की आवश्यकता होती है, और DevArt के एंटिटी एक्सप्लोरर में छोटी गाड़ी है, इसलिए यदि संभव हो तो मैं इससे बचना चाहूंगा। संपादित करें: मुझे अभी पता चला है कि यदि आप स्ट्रिंग फ़ील्ड के लिए अधिकतम लंबाई निर्धारित करते हैं तो यह स्वचालित रूप से VARCHAR2 होगा।

  2. क्या ओरेकल में TINYTEXT के लिए कोई समकक्ष हैं?

उत्तर

16

कॉलम के लिए सीएलओबी डेटाटाइप का उपयोग करना बहुत बुरा विचार है जो VARCHAR2 (1) होना चाहिए। ओवरहेड के अलावा (जो वास्तव में न्यूनतम हैं, क्योंकि ओरेकल < 4000 वर्णों के इनलाइन सीएलओबी का इलाज VARCHAR2 के रूप में करेगा) हमें हमेशा स्कीमा में हमारे डेटा के सबसे सटीक प्रतिनिधित्व का उपयोग करने का प्रयास करना चाहिए: यह सिर्फ अच्छा अभ्यास है।

यह वास्तव में DevArt टूल के साथ एक समस्या की तरह लगता है, या शायद इसका उपयोग करने के बारे में आपकी समझ (कोई अपराध नहीं)। किसी इकाई की विशेषता के डेटाटाइप को निर्दिष्ट करने के लिए और/या उन विनिर्देशों को ओरेकल के भौतिक डेटाटाइप में मैप करने का एक तरीका होना चाहिए। मैं क्षमा चाहता हूं अगर यह थोड़ा अस्पष्ट लगता है, तो मैं उत्पाद के साथ familar नहीं हूँ।

SQL> desc t69 
Name          Null? Type 
----------------------------------------- -------- -------- 
COL1            CLOB 

SQL> 
SQL> alter table t69 modify col1 varchar2(1) 
    2/
alter table t69 modify col1 varchar2(1) 
         * 
ERROR at line 1: 
ORA-22859: invalid modification of columns 


SQL> 

हम DDL का उपयोग कर तालिका संरचना को बदलने के लिए उसे ठीक कर सकते:


तो, यह बुनियादी समस्या है। क्योंकि स्कीमा में ऐसे कई कॉलम हैं, यह प्रक्रिया को स्वचालित रूप से स्वचालित कर रहा है। यह फ़ंक्शन मौजूदा कॉलम को छोड़ देता है और उसे VARCHAR2 के रूप में पुन: प्रयास करता है। यह सीएलओबी कॉलम में डेटा को VARCHAR2 कॉलम में माइग्रेट करने का विकल्प प्रदान करता है; आपको शायद इसकी आवश्यकता नहीं है, लेकिन यह पूर्णता के लिए है। (यह उत्पादन गुणवत्ता कोड नहीं है - यह त्रुटि हैंडलिंग, नहीं शून्य की कमी के प्रबंधन, आदि की जरूरत है) या

create or replace procedure clob2vc 
    (ptab in user_tables.table_name%type 
    , pcol in user_tab_columns.column_name%type 
    , pcol_size in number 
    , migrate_data in boolean := true) 
is 
begin 
    if migrate_data 
    then 
     execute immediate 'alter table '||ptab 
        ||' add tmp_col varchar2('|| pcol_size|| ')'; 
     execute immediate    
        'update '||ptab 
        ||' set tmp_col = substr('||pcol||',1,'||pcol_size||')'; 
    end if; 
    execute immediate 'alter table '||ptab 
       ||' drop column '|| pcol; 

    if migrate_data 
    then 
     execute immediate 'alter table '||ptab 
        ||' rename column tmp_col to '|| pcol; 
    else 
     execute immediate 'alter table '||ptab 
        ||' add '||pcol||' varchar2('|| pcol_size|| ')'; 
    end if; 
end; 
/

तो चलिए उस स्तंभ को बदलने ...

SQL> exec clob2vc ('T69', 'COL1', 1) 

PL/SQL procedure successfully completed. 

SQL> desc t69 
Name          Null? Type 
----------------------------------------- -------- --------------- 
COL1            VARCHAR2(1) 

SQL> 

इस प्रक्रिया कॉलिंग स्वचालित किया जा सकता सामान्य तरीकों से लिखित।

+0

मैं अभी भी उपकरण के लिए नया हूं, दी गई। मुझे बहुत देर हो गई है कि डेटाबेस उत्पन्न करने से पहले फ़ील्ड के लिए इच्छित डेटा प्रकार को निर्दिष्ट करना संभव है, लेकिन मैंने तब तक कई घंटों तक काम किया है। – Extrakun

7

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

ओएसकल में Tinytext में MySQL में कोई समकक्ष नहीं है। एक सीएलओबी एक सीएलओबी है।

4

मॉडल एक्सप्लोरर -> मॉडल.स्टोर -> टेबल्स/दृश्यों पर जाने का एक आसान समाधान है, आवश्यक कॉलम ढूंढें और इस फ़ील्ड के प्रकार को VARCHAR2 में बदलें।
फिर डेटाबेस में परिवर्तनों को जारी रखने के लिए मॉडल विज़ार्ड से अद्यतन डेटाबेस चलाएं।
अधिकतम लम्बाई पहलू सेट करना न भूलें (हालांकि, इसके साथ समस्या आगामी बीटा निर्माण में पहले ही तय हो चुकी है)।

संबंधित मुद्दे