ओरेकल प्रशासक गाइड निम्नलिखित कहते हैं:
किसी मौजूदा स्तंभ परिभाषा को संशोधित करने के लिए ALTER TABLE ... MODIFY स्टेटमेंट का उपयोग करें। आप स्तंभ डेटा प्रकार, डिफ़ॉल्ट मान, स्तंभ बाधा, स्तंभ अभिव्यक्ति (वर्चुअल कॉलम के लिए) और स्तंभ एन्क्रिप्शन को संशोधित कर सकते हैं।
आप किसी मौजूदा कॉलम की लंबाई बढ़ा सकते हैं, या घटा सकते हैं, यदि सभी मौजूदा डेटा नई लंबाई को संतुष्ट करते हैं। आप बाइट शब्दार्थ से एक स्तंभ को CHAR शब्दार्थ या इसके विपरीत में बदल सकते हैं। गैर-खाली CHAR कॉलम की लंबाई कम करने के लिए आपको आरंभिक पैरामीटर BLANK_TRIMMING = TRUE सेट करना होगा।
यदि आप डेटा प्रकार CHAR के एक कॉलम की लंबाई बढ़ाने के लिए एक तालिका को संशोधित कर रहे हैं, तो महसूस करें कि यह समय लेने वाला ऑपरेशन हो सकता है और इसके लिए पर्याप्त अतिरिक्त भंडारण की आवश्यकता हो सकती है, खासकर यदि तालिका में कई पंक्तियाँ हों। ऐसा इसलिए है क्योंकि नई पंक्ति लंबाई को संतुष्ट करने के लिए प्रत्येक पंक्ति में CHAR मान रिक्त-गद्देदार होना चाहिए।
Oracle SQL भाषा संदर्भ निम्नलिखित सहित और अधिक विस्तार से दिया गया है:
यदि स्तंभ की सभी पंक्तियों में नल हैं, तो आप किसी भी स्तंभ का डेटा प्रकार बदल सकते हैं। हालाँकि, यदि आप किसी भौतिक दृश्य कंटेनर तालिका में स्तंभ का डेटा प्रकार बदलते हैं, तो Oracle डेटाबेस संबंधित भौतिक दृश्य को अमान्य कर देता है।
आप हमेशा किसी वर्ण या कच्चे स्तंभ का आकार या किसी संख्यात्मक स्तंभ की शुद्धता बढ़ा सकते हैं, चाहे सभी पंक्तियों में नल हों या न हों। आप एक डेटा प्रकार के स्तंभ के आकार को तब तक कम कर सकते हैं जब तक कि परिवर्तन के लिए डेटा को संशोधित करने की आवश्यकता न हो। डेटाबेस मौजूदा डेटा को स्कैन करता है और यदि डेटा मौजूद है तो नई लंबाई सीमा से अधिक होने पर एक त्रुटि देता है।
आप DATE कॉलम को TIMESTAMP या TIMESTAMP को LOCAL TIME ZONE के साथ संशोधित कर सकते हैं। आप किसी भी TIMESTAMP को LATEAL TIME ZONE के साथ DATE कॉलम में संशोधित कर सकते हैं।
यदि तालिका खाली है, तो आप अग्रणी फ़ील्ड या किसी डेटाटाइम या अंतराल स्तंभ के आंशिक द्वितीय मान को बढ़ा या घटा सकते हैं। यदि तालिका खाली नहीं है, तो आप केवल एक प्रमुख क्षेत्र या अंशकालिक सेकंड को डेटाइम या अंतराल कॉलम बढ़ा सकते हैं।
CHAR और VARCHAR2 स्तंभों के लिए, आप CHAR निर्दिष्ट करके लंबाई शब्दार्थ को बदल सकते हैं (मूल रूप से बाइट्स में निर्दिष्ट कॉलम के लिए वर्ण शब्दार्थ को इंगित करने के लिए) या BYTE (मूल रूप से वर्णों में निर्दिष्ट स्तंभ के लिए बाइट शब्दार्थ को इंगित करने के लिए)। मौजूदा स्तंभों की लंबाई शब्दार्थ जानने के लिए, ALL_, USER_, या DBA_TAB_COLUMNS डेटा शब्दकोश दृश्य के CHAR_USED कॉलम को क्वेरी करें।
उपरोक्त दस्तावेज में अतिरिक्त जानकारी और प्रतिबंध हैं। यहां संख्या स्तंभ की सटीकता को कम करने और Varchar2 की लंबाई को कम करने के प्रयास का प्रदर्शन है। आप अन्य परिवर्तनों की कोशिश कर सकते हैं ताकि आप जान सकें कि क्या होगा।
--Setup.
DROP TABLE FOO;
CREATE TABLE FOO (BAR Number, BAR2 VARCHAR2(300));
INSERT INTO FOO (SELECT Level, RPAD(to_char(Level),10*Level,to_char(Level))
FROM DUAL CONNECT BY Level <=20);
COMMIT;
SELECT * FROM FOO;
--Reduce Number to Number(10).
ALTER TABLE FOO MODIFY (BAR NUMBER (10));
--Reduce Varchar2(300) to Varchar2(100) (data would be truncated).
ALTER TABLE FOO MODIFY (BAR2 VARCHAR2(100));
--Reduce Varchar2(300) to Varchar2(200) (no data would be truncated).
ALTER TABLE FOO MODIFY (BAR2 VARCHAR2(200));
परिवर्तन विवरण में निम्न आउटपुट होते हैं:
ALTER TABLE FOO MODIFY (BAR NUMBER (10))
Error report:
SQL Error: ORA-01440: column to be modified must be empty to decrease precision or scale
01440. 00000 - "column to be modified must be empty to decrease precision or scale"
ALTER TABLE FOO MODIFY (BAR2 VARCHAR2(100))
Error report:
SQL Error: ORA-01441: cannot decrease column length because some value is too big
01441. 00000 - "cannot decrease column length because some value is too big"
table FOO altered.
एक नया कॉलम बनाकर सटीक कम करें।
ALTER TABLE FOO ADD (BAR3 NUMBER(10));
UPDATE FOO SET Bar3 = Bar;
ALTER TABLE FOO DROP COLUMN BAR;
ALTER TABLE FOO RENAME COLUMN BAR3 TO BAR;