আমি বিবৃতি জানি:
create table xyz_new as select * from xyz;
কোনটি কাঠামো এবং ডেটা অনুলিপি করে, তবে আমি যদি কেবল কাঠামোটিই চাই?
আমি বিবৃতি জানি:
create table xyz_new as select * from xyz;
কোনটি কাঠামো এবং ডেটা অনুলিপি করে, তবে আমি যদি কেবল কাঠামোটিই চাই?
উত্তর:
কেবল এমন একটি ক্লজ ব্যবহার করুন যা কোনও সারি নির্বাচন করবে না:
create table xyz_new as select * from xyz where 1=0;
নিম্নলিখিত জিনিসগুলি নতুন টেবিলটিতে অনুলিপি করা হবে না:
এটি পার্টিশনগুলি পরিচালনা করে না
আপনি যে পদ্ধতিটি অনেকটা গ্রহণ করেছেন আমি তা ব্যবহার করেছি, তবে কেউ উল্লেখ করেছেন যে এটি সীমাবদ্ধতার সদৃশ হয় না (আমি মনে করি না NULL ব্যতীত)।
আপনি যদি পুরো কাঠামোর সদৃশ করতে চান তবে আরও উন্নত পদ্ধতিটি হ'ল:
SET LONG 5000
SELECT dbms_metadata.get_ddl( 'TABLE', 'MY_TABLE_NAME' ) FROM DUAL;
এটি আপনাকে সম্পূর্ণ তৈরি বিবৃতি পাঠ্য দেবে যা আপনি নতুন সারণী তৈরির জন্য যেমন চান তেমন পরিবর্তন করতে পারবেন। আপনাকে টেবিলের নাম এবং অবশ্যই সমস্ত সীমাবদ্ধতা পরিবর্তন করতে হবে।
(আপনি এক্সপি / আইএমপি ব্যবহার করে পুরানো সংস্করণগুলিতে এটি করতেও পারেন তবে এটি এখন অনেক সহজ)
আপনি যে টেবিলটি পরে রয়েছেন তা অন্য কোনও স্কিমাতে যুক্ত করার জন্য সম্পাদিত :
SELECT dbms_metadata.get_ddl( 'TABLE', 'MY_TABLE_NAME', 'OTHER_SCHEMA_NAME' ) FROM DUAL;
My_table_name
বিদ্যমান টেবিল হয়। তবে আমি কীভাবে আমার নতুন টেবিলটির নাম তৈরি করব?
new_table = dbms_metadata.get_ddl( 'TABLE', 'MY_TABLE_NAME', 'OTHER_SCHEMA_NAME' ).
এদিকে দয়া করে আমাকে জানান যে লং এখানে কী করে।
এসকিএল বিকাশকারী ব্যবহার করে টেবিলটি নির্বাচন করুন এবং ডিডিএল ট্যাবে ক্লিক করুন
আপনি যখন কোনও স্কেল ওয়ার্কশিটে চালনা করেন তখন কোনও ডাটা ছাড়াই একটি নতুন টেবিল তৈরি করতে আপনি সেই কোডটি ব্যবহার করতে পারেন
স্ক্লাডেওলফারটি ওরাকল থেকে অ্যাপ্লিকেশন ব্যবহারের জন্য নিখরচায়।
যদি টেবিলটিতে সিকোয়েন্স থাকে বা ডিডিএল ট্রিগার করে তবে কখনও কখনও আপনার জন্য এটি তৈরি করে। আপনি এগুলি কী অর্ডার এনেছেন এবং কখন ট্রিগারগুলি চালু বা বন্ধ করবেন তা আপনার কেবলমাত্র যত্নবান হতে হবে।
SQL
DECLARE
l_ddl VARCHAR2 (32767);
BEGIN
l_ddl := REPLACE (
REPLACE (
DBMS_LOB.SUBSTR (DBMS_METADATA.get_ddl ('TABLE', 'ACTIVITY_LOG', 'OLDSCHEMA'))
, q'["OLDSCHEMA"]'
, q'["NEWSCHEMA"]'
)
, q'["OLDTABLSPACE"]'
, q'["NEWTABLESPACE"]'
);
EXECUTE IMMEDIATE l_ddl;
END;
আপনি এটি করতে পারেন
Create table New_table as
select * from Old_table where 1=2 ;
তবে সতর্কতা অবলম্বন করুন আপনি
যে টেবিলটি ডোজ তৈরি করেছেন তাতে কোনও পুরানো_ টেবিলের মতো কোনও সূচক, পিকে ইত্যাদি নেই
SELECT * INTO newtable
FROM oldtable
WHERE 1 = 0;
অন্যের স্কিমা ব্যবহার করে একটি নতুন, খালি টেবিল তৈরি করুন। কেবল এমন একটি শৃঙ্খলা যুক্ত করুন যা ক্যোয়ারিকে কোনও ডেটা ফেরত দেয় না:
আপনি একটি করতে পারেন
create table abc_new as select * from abc;
তারপরে টেবিলটি কেটে ফেলুন abc_new
। আশা করি এটি আপনার প্রয়োজনীয়তা যথেষ্ট করবে।
সহজভাবে একটি কোয়েরি লিখুন:
create table new_table as select * from old_table where 1=2;
যেখানে new_table
নতুন টেবিল যা আপনি তৈরি করতে চান এবং নাম old_table
বিদ্যমান টেবিল যার গঠন আপনি কপি করতে চান তার নাম, এই শুধুমাত্র গঠন কপি হবে।
WHERE 1 = 0
বা অনুরূপ মিথ্যা শর্তগুলি কাজ করে তবে তাদের চেহারা কেমন তা আমি পছন্দ করি না। ওরাকল 12 সি + আইএমএইচওর জন্য প্রান্তিকভাবে ক্লিনার কোডটি
CREATE TABLE bar AS
SELECT *
FROM foo
FETCH FIRST 0 ROWS ONLY;
একই সীমাবদ্ধতা প্রযোজ্য: কেবলমাত্র কলাম সংজ্ঞা এবং তাদের নলিয়াটি নতুন টেবিলে অনুলিপি করা হয়েছে।
অন্য উপায়ে আপনি নীচে তালিকাভুক্ত কমান্ড থেকে টেবিল তৈরির ডিডিএল পেতে এবং তৈরিটি সম্পাদন করতে পারেন।
SELECT DBMS_METADATA.GET_DDL('TYPE','OBJECT_NAME','DATA_BASE_USER') TEXT FROM DUAL
TYPE
হয় TABLE
, PROCEDURE
ইত্যাদিএই কমান্ডের সাহায্যে আপনি ডাটাবেস অবজেক্ট থেকে সর্বাধিক ddl পেতে পারেন।
GET_DDL
কেস সংবেদনশীল।
Create table target_table
As
Select *
from source_table
where 1=2;
উত্স_সারণযোগ্য আপনি যে টেবিলটির কাঠামোটি অনুলিপি করতে চান তা।
Pl / sql বিকাশকারীকে ব্যবহার করে আপনি টেবিলের নামটি স্কেল ওয়ার্কস্পেসে বা অবজেক্ট এক্সপ্লোরার-এ ডান ক্লিক করতে পারেন, "ভিউ" -তে ক্লিক করুন এবং "সিকিউএল দেখুন" ক্লিক করার চেয়ে সমস্ত সীমাবদ্ধতার সাথে টেবিলটি তৈরি করতে স্কয়ার স্ক্রিপ্ট তৈরি করে , সূচী, পার্টিশন ইত্যাদি।
এরপরে আপনি নতুন_সারণযোগ্য_নামটি ব্যবহার করে স্ক্রিপ্টটি চালাবেন
- xyz থেকে নির্বাচন করুন * xyz_new টেবিল তৈরি করুন;
- এটি টেবিল তৈরি করবে এবং সমস্ত ডেটা অনুলিপি করবে।
- xyz_new থেকে মুছুন;
- এটিতে একই টেবিল কাঠামো থাকবে তবে অনুলিপি করা সমস্ত ডেটা মুছে ফেলা হবে।
আপনি যদি উত্তর দ্বারা নির্দিষ্ট সীমাবদ্ধতাগুলি অতিক্রম করতে চান: আমি কীভাবে ডেটা অনুলিপি না করে ওরাকল টেবিলের একটি অনুলিপি তৈরি করতে পারি?
উপরের কাজটি দুটি সহজ ধাপে শেষ করা যেতে পারে।
CREATE table new_table_name AS(Select * from old_table_name);
query
উপরে একটি টেবিলের সদৃশ (বিষয়বস্তু সঙ্গে পাশাপাশি) সৃষ্টি করে।
কাঠামোটি পেতে, টেবিলের সামগ্রীগুলি ব্যবহার করে মুছুন।
DELETE * FROM new_table_name.
আশা করি এটি আপনার সমস্যার সমাধান করে। এবং আগের পোস্টগুলি ধন্যবাদ। আমাকে অনেক অন্তর্দৃষ্টি দিয়েছে।
truncate
সংস্করণটির চেয়ে কম দক্ষ । পাশাপাশি সমস্ত ডেটার জন্য এক্সটেন্টস বরাদ্দ করার পরে, আপনি মুছে ফেলা দিয়ে এগুলি মুক্ত করছেন না, সুতরাং আপনি টেবিলটি পুরানো আকার না বাড়ানো পর্যন্ত সম্ভাব্য স্থান নষ্ট করছেন। এবং আপনি sertোকান এবং মুছুন উভয়ই পূর্বাবস্থায় ফিরিয়ে আনুন / পুনরায় তৈরি করছেন। জিমের উত্তর খুব সহজভাবে এগুলি এড়িয়ে যায়।