আপনি যখন কলামটির দৈর্ঘ্য সংশোধন (হ্রাস) করবেন তখন কী ঘটে?


10

বলি আমার কাছে দুটি ধরণের কলাম রয়েছে NUMBER(যথার্থতা এবং স্কেল ছাড়াই) এবং VARCHAR(300)। আমি দেখেছি যে এই কলামগুলি আমার ডেটার জন্য অনেক বড়, তাই আমি এগুলিতে NUMBER(11)এবং এগুলি সংশোধন করতে চাই VARCHAR(10)। সুতরাং আমি যদি এই এসকিউএল স্টেটমেন্টটি চালিত করি:

ALTER TABLE FOO
    MODIFY(BAR NUMBER(10));
  • আমি কি অযৌক্তিক কলামে এটি করতে সক্ষম হব?
  • যদি তা হয় তবে এর চেয়ে বেশি যদি একটি মান থাকে তবে কী NUMBER(10)ওরাকল আমাকে এ সম্পর্কে বলবে?
  • পূর্বনির্ধারিত হলে কলাম ডিফল্ট মানগুলি কি অপরিবর্তিত থাকবে?
  • কলাম কণ্ঠনালী বিকল্প অপরিবর্তিত থাকবে?
  • সেই কলামের প্রাথমিক, বিদেশী, অনন্য কী কী অপরিবর্তিত থাকবে?
  • সেই কলামগুলিতে জড়িত বাধাগুলি কি অপরিবর্তিত থাকবে?
  • সেই কলামগুলিতে সূচিগুলি কি অপরিবর্তিত থাকবে?

আমার প্রশ্নের উত্তর দেওয়ার কোনও অফিসিয়াল ডকুমেন্টেশন আছে কি?

উত্তর:


12

ওরাকল প্রশাসকগণ গাইড নিম্নলিখিত বলেছেন:

একটি বিদ্যমান কলাম সংজ্ঞা সংশোধন করতে বিকল্প টেবিল ... মোডিফাই বিবৃতি ব্যবহার করুন। আপনি কলামের ডেটা টাইপ, ডিফল্ট মান, কলাম সীমাবদ্ধতা, কলাম অভিব্যক্তি (ভার্চুয়াল কলামগুলির জন্য) এবং কলাম এনক্রিপশন সংশোধন করতে পারেন।

সমস্ত বিদ্যমান ডেটা যদি নতুন দৈর্ঘ্যকে সন্তুষ্ট করে তবে আপনি বিদ্যমান কলামটির দৈর্ঘ্য বাড়িয়ে দিতে পারেন বা এটি হ্রাস করতে পারেন। আপনি বাইট শব্দার্থবিজ্ঞান থেকে CHAR শব্দার্থবিজ্ঞান বা বিপরীতে একটি কলাম পরিবর্তন করতে পারেন। খালি খালি CHAR কলামটির দৈর্ঘ্য হ্রাস করতে আপনাকে অবশ্যই BLANK_TRIMMING = TRUE সূচনা পরামিতিটি সেট করতে হবে।

আপনি যদি CHAR ডেটা টাইপের কলামের দৈর্ঘ্য বাড়ানোর জন্য কোনও টেবিলটি সংশোধন করছেন তবে বুঝতে পারেন যে এটি একটি সময় সাশ্রয়ী ক্রিয়াকলাপ হতে পারে এবং যথেষ্ট পরিমাণে অতিরিক্ত স্টোরেজ প্রয়োজন হতে পারে, বিশেষত যদি টেবিলটিতে অনেকগুলি সারি থাকে। এটি কারণ নতুন কলাম দৈর্ঘ্য সন্তুষ্ট করতে প্রতিটি সারিতে CHAR মান ফাঁকা প্যাডযুক্ত থাকতে হবে।

ওরাকল SQL এর ভাষা রেফারেন্স নিম্নলিখিত সহ আরো অনেক কিছু বিস্তারিত রয়েছে:

আপনি যদি কোনও কলামের ডেটা ধরণের পরিবর্তন করতে পারেন যদি কলামের সমস্ত সারিতে শূন্য থাকে। যাইহোক, আপনি যদি কোনও উপাদানযুক্ত দৃশ্যের ধারক টেবিলের কোনও কলামের ডেটা ধরণের পরিবর্তন করেন, তবে ওরাকল ডেটাবেসটি সম্পর্কিত বস্তুগত দর্শনটিকে অবৈধ করে দেয়।

আপনি সবসময় কোনও অক্ষরের আকার বা কাঁচা কলাম বা একটি সংখ্যাসূচক কলামের যথার্থতা বাড়াতে পারেন, সমস্ত সারিতে নাল থাকে কিনা contain আপনি যতক্ষণ না পরিবর্তনকে ডেটাফাই করার প্রয়োজন হয় না ততক্ষণ আপনি কোনও কলামের ডেটা ধরণের আকার হ্রাস করতে পারেন database

আপনি স্থানীয় সময় জোনের সাথে একটি তারিখ কলামটি টাইমস্ট্যাম্প বা টাইমস্ট্যাম্পে সংশোধন করতে পারেন। আপনি স্থানীয় সময়সীমার সাথে যে কোনও টাইমস্ট্যাম্প একটি তারিখ কলামে পরিবর্তন করতে পারেন।

যদি টেবিলটি খালি থাকে তবে আপনি অগ্রণী ক্ষেত্র বা একটি ডেটটাইম বা অন্তর্বর্তী কলামের ভগ্নাংশের দ্বিতীয় মান বাড়াতে বা হ্রাস করতে পারেন। যদি টেবিলটি খালি না থাকে, তবে আপনি কেবল অগ্রণী ক্ষেত্র বা একটি ডেটটাইম বা ব্যবধান কলামের ভগ্নাংশ দ্বিতীয় করতে পারেন।

CHAR এবং VARCHAR2 কলামের জন্য, আপনি CHAR নির্দিষ্ট করে দৈর্ঘ্য শব্দার্থবিজ্ঞান পরিবর্তন করতে পারেন (মূলত অক্ষরে বর্ণিত একটি কলামের জন্য বাইট শব্দার্থ নির্দেশক) বিদ্যমান কলামগুলির দৈর্ঘ্য শব্দার্থবিজ্ঞান শিখতে, ALL_, USER_, বা DBA_TAB_COLUMNS ডেটা অভিধানের ভিউয়ের CHAR_USED কলামটি জিজ্ঞাসা করুন।

উপরের ডকুমেন্টেশনে অতিরিক্ত তথ্য এবং বিধিনিষেধ রয়েছে। এখানে একটি সংখ্যার কলামের যথার্থতা হ্রাস করার এবং ভার্চর 2 এর দৈর্ঘ্য হ্রাস করার চেষ্টা করার একটি প্রদর্শন রয়েছে। আপনি অন্যান্য পরিবর্তনগুলি চেষ্টা করে দেখতে পারেন যাতে কী হবে তা আপনি জানতে পারবেন।

--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;

সুতরাং, উপসংহারটি হ'ল - আপনি যদি কলামের যথার্থতা বা স্কেল হ্রাস করতে চান এবং সূচিপত্র, কী ইত্যাদির মতো জিনিসগুলি রাখতে চান তবে এটি করার একমাত্র উপায় হ'ল টেবিলটি অনুলিপি করা, এটি কেটে ফেলা, প্রকার পরিবর্তন করা, এতে ডেটা অনুলিপি করা এবং ছেড়ে দেওয়া অস্থায়ী টেবিল কোন দ্রুত, আরও মার্জিত উপায় আছে?
মুনোত্তকা

1
ঠিক আছে, আপনি একটি নতুন কলাম তৈরি করতে পারেন, ডেটা অনুলিপি করতে পারেন, সূচিটি আবার তৈরি করতে পারেন, পুরাতন কলামটি ফেলে দিতে পারেন এবং নতুনটির নাম পরিবর্তন করতে পারেন। আপনি DBMS_REDEFINITION ব্যবহার করতে পারেন, বা আপনি একটি নতুন টেবিল তৈরি করতে পারেন, ডেটা অনুলিপি করতে পারেন, পুরানো টেবিলটি ফেলে দিতে পারেন এবং নতুনটির নাম পরিবর্তন করতে পারেন। অথবা আপনি টেবিলটি রফতানি করতে পারেন, এটিকে ফেলে দিতে পারেন, নতুন সংজ্ঞা দিয়ে আবার তৈরি করতে পারেন এবং সেগুলি ডেটা আমদানি করে। এটি করার প্রচুর উপায় রয়েছে তবে দ্রুত / আরও মার্জিত হ'ল আপনাকে সিদ্ধান্ত নিতে হবে।
লেইফ রিফেল

সম্ভবত আপনি একটি নতুন কলামও তৈরি করতে পারেন, এটিতে ডেটা অনুলিপি করতে পারেন, পুরানো কলামটি বাতিল করতে পারেন, এর দৈর্ঘ্য পরিবর্তন করতে পারবেন, নতুন কলাম থেকে ডেটাটি পরিবর্তিত পুরানো কলামে অনুলিপি করতে এবং নতুন কলামটি ফেলে দিতে পারেন। এবং তার সব কারণ ওরাकल ডেটা মাপসই করা সত্ত্বেও সংখ্যক কলামগুলি হ্রাস করতে দেয় না। 8- {
হ্যান্স-পিটার স্টার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.