কীভাবে আপনি ওরাকল ডাটাবেসে একটি অস্থায়ী টেবিল তৈরি করবেন?


94

আমি ওরাকল ডাটাবেসে একটি অস্থায়ী টেবিল তৈরি করতে চাই

কিছুটা এইরকম

Declare table @table (int id)

এসকিউএল সার্ভারে

এবং তারপরে এটি একটি নির্বাচনী বিবৃতি দিয়ে পপুলেট করুন

এটা কি সম্ভব?

ধন্যবাদ

উত্তর:


133

হ্যাঁ, ওরাকলের অস্থায়ী টেবিল রয়েছে। এখানে একটি একটি লিঙ্ক 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;

অস্থায়ী টেবিলগুলি কার্যকর হতে পারে তবে তারা সাধারণত ওরাকলে ব্যবহার করা হয়। এগুলি ইনলাইন ভিউগুলি ব্যবহার করে একটি একক এসকিউএল স্টেটমেন্টে একাধিক পদক্ষেপ একত্রিত করে এড়ানো যেতে পারে।


41
কোনও ডাউনভোট নয়, তবে আমি কোনও বিশ্বব্যাপী অস্থায়ী টেবিলের জন্য নির্বাচন হিসাবে একটি সারণী তৈরির প্রস্তাব দেব না - কম অভিজ্ঞ বিকাশকারী এই ভুল ধারণা পেতে পারে যে তারা প্রতিবারই এইভাবে জিটিটি স্থাপন করতে হবে। অবশ্যই, এটি অন্য টেবিল থেকে সংজ্ঞাটি অনুলিপি করার একটি সুবিধাজনক উপায় তবে উদাহরণটি সম্ভবত কিছু লোককে বিভ্রান্ত করবে।
জেফ্রি কেম্প

আমি এখানে জেফ্রি কেম্পের সাথে সম্পূর্ণভাবে একমত, এই টেবিলটি তৈরি করার এটি কেবল একটি উপায়, আমি এটির মধ্যে দৌড়ে এসেছি এবং বুঝতে পেরেছি মানুষ, আমাকে কি এই নির্বাচনী বিবৃতি আমার ডিডিএলে রাখতে হবে?
বিজয় কুমার

4
আপনি কেবল "যেখানে 1 = 0" যুক্ত করতে পারেন;
পালসেন্টে

@ প্যালসেন্ট যা এখনও বোঝায় যে অস্থায়ী একটি তৈরি করতে আপনার একই কাঠামোর সাথে একটি "রিয়েল টেবিল" লাগবে, যা কিছু নয় (এটিও এই উত্তরটি দেখুন that এগুলি ছাড়াও, এই উত্তরটি কেবলমাত্র নেই তা উল্লেখ করতেও মিস করে গ্লোবাল অস্থায়ী টেবিল, কিন্তু এক এছাড়াও "সাধারণ" সাময়িকভাবে টেবিল। ব্যবহার করতে পারেন SQL সার্ভার পার্থক্য, যেমন ম্যাথু দ্বারা নির্দিষ্ট , অন্য গুরুত্বপূর্ণ পয়েন্ট এক করা উচিত নিশ্চিত না মিস (অথবা এ "দ্বিতীয় কল" ত্রুটি সম্পর্কে আশ্চর্য ইতিমধ্যে বিদ্যমান অবজেক্ট সম্পর্কে;)
ইজজি

4
এর জন্য বৈধ ব্যবহারের কেস CREATE TABLE AS SELECT: এলওবি কলাম সহ দূরবর্তী টেবিলগুলি থেকে নির্বাচন করুন, যেহেতু আপনি SELECTসেগুলি থেকে সরাসরি পারবেন না । আমি একটি প্রত্যন্ত ডাটাবেস থেকে রেকর্ড অনুলিপি করার জন্য একটি পদ্ধতি লিখছি, এবং এটি ছিল আমার সমাধান: রেকর্ডগুলি একটি জিটিটিতে আনুন এবং তারপরে "আসল" টেবিলটিতে অনুলিপি করুন।
rgoliveira

79

মাত্র একটি টিপ .. ওরাকলে অস্থায়ী টেবিলগুলি এসকিউএল সার্ভারের থেকে পৃথক। আপনি এটিকে কেবল এবং একবারই তৈরি করেছেন, প্রতি সেশনে নয়। আপনি এতে যে সারিগুলি সন্নিবেশ করিয়েছেন সেগুলি কেবলমাত্র আপনার সেশনের জন্য দৃশ্যমান এবং স্বয়ংক্রিয়ভাবে মুছে ফেলা হবে (অর্থাত্ TRUNCATE, না DROP) আপনি যখন সেশনটি শেষ করেন (বা লেনদেনের সমাপ্তি, আপনি কোন "অন কমিট" ক্লজটি ব্যবহার করেন তার উপর নির্ভর করে)।


15
আমি পুরোপুরি বুঝতে পারি না। আপনি বলেছিলেন যে আপনি এটি একবারে এবং একবারে তৈরি করেছেন, এবং প্রতিটি সেশনে নয়। তবে আপনি আরও বলেছেন যে অস্থায়ী টেবিলটি প্রতিটি সেশনে মুছে ফেলা হয়। এর অর্থ এই নয় যে প্রতি সেশনে আপনাকে অস্থায়ী টেবিল তৈরি করতে হবে?
কেওস

31
DELETED, DROPপ্যাড নয়
ট্রিপ কাইনেটিকস

11
আপনি প্রতি সেশনে অস্থায়ী টেবিল তৈরি করবেন না, তবে একবার। টেবিলটি সিস্টেম জুড়ে উপলব্ধ। সমান্তরাল সেশনগুলি সহ আপনি যে কোনও সেশন তৈরি করেন তা থেকে টেবিলটি অ্যাক্সেসযোগ্য। তবে আপনি যখন একটি সেশনের অভ্যন্তর থেকে ডেটা .োকান, সেই ডেটাটি সিস্টেম জুড়ে অন্যান্য সমান্তরাল সেশনগুলি থেকে দৃশ্যমান হয় না। একটি সেশনের ডেটা কেবল সেই সেশনের সম্পত্তি। সুতরাং ডেটাটি সেশন নির্দিষ্ট, পদ্ধতি অনুসারে দৃশ্যমান নয়। অতএব আপনি যখন একটি সেশন বন্ধ করেন, তখন সেশনটির ডেটা টেবিল থেকে মুছে ফেলা হয়।
সুভাষিসম

33
CREATE GLOBAL TEMPORARY TABLE Table_name
    (startdate DATE,
     enddate DATE,
     class CHAR(20))
  ON COMMIT DELETE ROWS;

10
নোট করুন যে সারিগুলি সর্বদা সেশন শেষে মুছে ফেলা হবে; ON COMMIT DELETE ROWSএর অর্থ যদি আপনি একটি সেশনের সময় বাড়তি প্রতিশ্রুতিবদ্ধ হন তবে সেগুলি শীঘ্রই বাতিল করা হবে।

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

-2

টেবিল তৈরি করুন টেবিল_পরিবর্তন_প্রেমী_অজেক্টগুলি AS

O.owner নির্বাচন করুন, o.object_name FROM sys.all_objects o যেখানে o.object_type = 'টেবিল';


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