আমি ওরাকল ডাটাবেসে একটি অস্থায়ী টেবিল তৈরি করতে চাই
কিছুটা এইরকম
Declare table @table (int id)
এসকিউএল সার্ভারে
এবং তারপরে এটি একটি নির্বাচনী বিবৃতি দিয়ে পপুলেট করুন
এটা কি সম্ভব?
ধন্যবাদ
উত্তর:
হ্যাঁ, ওরাকলের অস্থায়ী টেবিল রয়েছে। এখানে একটি একটি লিঙ্ক AskTom তাদের বর্ণনা নিবন্ধ এবং এখানে সরকারী ওরাকল তৈরি সারণী ডকুমেন্টেশন।
তবে ওরাকল-এ কেবল অস্থায়ী সারণীতে থাকা ডেটা অস্থায়ী। সারণিটি একটি নিয়মিত অবজেক্ট যা অন্যান্য সেশনে দৃশ্যমান। ওরাকলে প্রায়শই অস্থায়ী সারণী তৈরি করা এবং ফেলে দেওয়া খারাপ অভ্যাস।
CREATE GLOBAL TEMPORARY TABLE today_sales(order_id NUMBER)
ON COMMIT PRESERVE ROWS;
ওরাকল 18c বেসরকারী অস্থায়ী টেবিলগুলি যুক্ত করেছে, যা মেমোরি অবজেক্টের একক সেশন। আরও বিশদ জন্য ডকুমেন্টেশন দেখুন । ব্যক্তিগত অস্থায়ী টেবিলগুলি গতিশীলভাবে তৈরি এবং বাদ দেওয়া যেতে পারে।
CREATE PRIVATE TEMPORARY TABLE ora$ptt_today_sales AS
SELECT * FROM orders WHERE order_date = SYSDATE;
অস্থায়ী টেবিলগুলি কার্যকর হতে পারে তবে তারা সাধারণত ওরাকলে ব্যবহার করা হয়। এগুলি ইনলাইন ভিউগুলি ব্যবহার করে একটি একক এসকিউএল স্টেটমেন্টে একাধিক পদক্ষেপ একত্রিত করে এড়ানো যেতে পারে।
CREATE TABLE AS SELECT
: এলওবি কলাম সহ দূরবর্তী টেবিলগুলি থেকে নির্বাচন করুন, যেহেতু আপনি SELECT
সেগুলি থেকে সরাসরি পারবেন না । আমি একটি প্রত্যন্ত ডাটাবেস থেকে রেকর্ড অনুলিপি করার জন্য একটি পদ্ধতি লিখছি, এবং এটি ছিল আমার সমাধান: রেকর্ডগুলি একটি জিটিটিতে আনুন এবং তারপরে "আসল" টেবিলটিতে অনুলিপি করুন।
মাত্র একটি টিপ .. ওরাকলে অস্থায়ী টেবিলগুলি এসকিউএল সার্ভারের থেকে পৃথক। আপনি এটিকে কেবল এবং একবারই তৈরি করেছেন, প্রতি সেশনে নয়। আপনি এতে যে সারিগুলি সন্নিবেশ করিয়েছেন সেগুলি কেবলমাত্র আপনার সেশনের জন্য দৃশ্যমান এবং স্বয়ংক্রিয়ভাবে মুছে ফেলা হবে (অর্থাত্ TRUNCATE
, না DROP
) আপনি যখন সেশনটি শেষ করেন (বা লেনদেনের সমাপ্তি, আপনি কোন "অন কমিট" ক্লজটি ব্যবহার করেন তার উপর নির্ভর করে)।
DELETED
, DROP
প্যাড নয়
CREATE GLOBAL TEMPORARY TABLE Table_name
(startdate DATE,
enddate DATE,
class CHAR(20))
ON COMMIT DELETE ROWS;
ON COMMIT DELETE ROWS
এর অর্থ যদি আপনি একটি সেশনের সময় বাড়তি প্রতিশ্রুতিবদ্ধ হন তবে সেগুলি শীঘ্রই বাতিল করা হবে।