कॉलम के लिए सीएलओबी डेटाटाइप का उपयोग करना बहुत बुरा विचार है जो 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>
इस प्रक्रिया कॉलिंग स्वचालित किया जा सकता सामान्य तरीकों से लिखित।
मैं अभी भी उपकरण के लिए नया हूं, दी गई। मुझे बहुत देर हो गई है कि डेटाबेस उत्पन्न करने से पहले फ़ील्ड के लिए इच्छित डेटा प्रकार को निर्दिष्ट करना संभव है, लेकिन मैंने तब तक कई घंटों तक काम किया है। – Extrakun