Oracle डेटाबेस में आप एक अस्थायी तालिका कैसे बनाते हैं?


90

मैं ओरेकल डेटाबेस में एक अस्थायी तालिका बनाना चाहूंगा

कुछ इस तरह

Declare table @table (int id)

SQL सर्वर में

और फिर उसे चुनिंदा स्टेटमेंट के साथ पॉप्युलेट करें

क्या यह संभव है?

धन्यवाद

जवाबों:


130

हां, ओरेकल में अस्थायी टेबल हैं। यहाँ एक AskTom लेख का लिंक दिया गया है जिसमें उनका वर्णन किया गया है और यहाँ आधिकारिक oracle CREATE TABLE प्रलेखन है।

हालांकि, ओरेकल में, केवल एक अस्थायी तालिका में डेटा अस्थायी है। तालिका एक नियमित वस्तु है जो अन्य सत्रों में दिखाई देती है। ओरेकल में अस्थायी टेबल बनाने और छोड़ने के लिए यह एक बुरा अभ्यास है।

CREATE GLOBAL TEMPORARY TABLE today_sales(order_id NUMBER)
ON COMMIT PRESERVE ROWS;

ओरेकल 18 सी में निजी अस्थायी तालिकाओं को जोड़ा गया, जो एकल-सत्र इन-मेमोरी ऑब्जेक्ट हैं। देखें प्रलेखन अधिक जानकारी के लिए। निजी अस्थायी तालिकाओं को गतिशील रूप से बनाया और गिराया जा सकता है।

CREATE PRIVATE TEMPORARY TABLE ora$ptt_today_sales AS
SELECT * FROM orders WHERE order_date = SYSDATE;

अस्थायी टेबल्स उपयोगी हो सकते हैं लेकिन वे आम तौर पर ओरेकल में दुरुपयोग होते हैं। इनलाइन विचारों का उपयोग करके एक एकल SQL कथन में कई चरणों को जोड़कर उन्हें अक्सर टाला जा सकता है।


40
कोई डाउनवोट नहीं है, लेकिन मैं कभी भी वैश्विक अस्थायी तालिका के लिए क्रिएट टेबल के रूप में चयन करने की सिफारिश नहीं करूंगा - एक कम अनुभवी डेवलपर को गलत विचार मिल सकता है कि उन्हें हर बार इस तरह से जीटीटी को आबाद करना होगा। निश्चित रूप से, यह किसी अन्य तालिका से परिभाषा की नकल करने का एक सुविधाजनक तरीका है, लेकिन उदाहरण शायद कुछ लोगों को भ्रमित करेगा।
जेफरी केम्प

मैं यहां जेफरी केम्प के साथ पूरी तरह से सहमत हूं, यह इस तालिका को बनाने का सिर्फ एक तरीका है, मैं इस में भाग गया, और एहसास हुआ कि आदमी, क्या मुझे यह चयन विवरण अपने डीडीएल में रखना है।
विजय कुमार

3
आप बस "जहाँ 1 = 0" जोड़ सकते हैं;
पैलेंट

@Palcente जो अभी भी इंगित करता है कि आपको एक अस्थायी संरचना बनाने के लिए उसी संरचना के साथ "वास्तविक तालिका" की आवश्यकता होगी, जो कि मामला नहीं है ( यह उत्तर भी देखें । इसके अलावा, यह उत्तर इंगित करने के लिए याद नहीं है। वैश्विक अस्थायी तालिका, लेकिन एक भी "साधारण" अस्थायी तालिकाओं। उपयोग कर सकते हैं एसक्यूएल सर्वर के लिए अंतर है, के रूप में मैथ्यू द्वारा बताया , है एक और महत्वपूर्ण बात यह एक सुनिश्चित करना चाहिए नहीं याद आती है (या पर "दूसरी कॉल" त्रुटियों के बारे में चिंता वस्तु के बारे में पहले से ही विद्यमान;)
इज़ी

2
के लिए वैध उपयोग के मामले CREATE TABLE AS SELECT: एलओबी कॉलम के साथ दूरस्थ तालिकाओं से चयन करें, क्योंकि आप सीधे SELECTउनसे नहीं कर सकते । मैं दूरस्थ डेटाबेस से रिकॉर्ड कॉपी करने के लिए एक प्रक्रिया लिख ​​रहा हूं, और यह मेरा समाधान था: रिकॉर्ड्स को जीटीटी में लाएं, और फिर उस से "असली" तालिका में कॉपी करें।
rgoliveira

78

बस एक टिप .. ओरेकल में अस्थायी टेबल SQL सर्वर के लिए अलग हैं। आप इसे ONCE और केवल ONCE बनाते हैं, हर सत्र में नहीं। आपके द्वारा इसमें डाली गई पंक्तियाँ केवल आपके सत्र के लिए दिखाई देती हैं, और जब आप सत्र (या लेन-देन का अंत, जिसके आधार पर आप उपयोग करते हैं) के आधार पर स्वचालित रूप से हटा दिए जाते हैं (यानी, TRUNCATEनहीं, DROP)।


15
मैं पूरी तरह से समझ में नहीं आता। आपने कहा कि आप इसे केवल एक बार और केवल एक बार ही बनाते हैं, और हर सत्र में नहीं। हालाँकि आपने यह भी कहा कि अस्थायी तालिका को हर सत्र में हटा दिया जाता है। इसका मतलब यह नहीं है कि आपको हर सत्र में अस्थायी तालिका बनाने की आवश्यकता होगी?
अराजक

31
DELETEDDROPपेड नहीं ।
ट्रिप्प कैनेटिक्स

10
आप हर सत्र में अस्थायी तालिका नहीं बनाते हैं, लेकिन एक बार। तालिका प्रणाली भर में उपलब्ध है। तालिका आपके द्वारा बनाए गए किसी भी सत्र से सुलभ है, जिसमें समानांतर सत्र शामिल हैं। लेकिन जब आप एक सत्र के अंदर से डेटा सम्मिलित करते हैं, तो वह डेटा पूरे सिस्टम में अन्य समानांतर सत्रों से दिखाई नहीं देता है। एक सत्र का डेटा केवल उस सत्र की संपत्ति है। इस प्रकार डेटा सत्र विशिष्ट है, दृश्यमान सिस्टमवाइज़ नहीं। इसलिए जब आप एक सत्र बंद करते हैं, तो उस सत्र का डेटा तालिका से हटा दिया जाता है।
सुभासिम्स Sub

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

10
ध्यान दें कि सत्र के अंत में पंक्तियों को हमेशा हटा दिया जाएगा; ON COMMIT DELETE ROWSयदि आप एक सत्र के दौरान वेतन वृद्धि करते हैं, तो उन्हें जल्द ही छोड़ दिया जाएगा।

1
zygimantus, हाँ, आप सत्र के दौरान मैन्युअल रूप से हटा सकते हैं। सत्र के दौरान, अस्थायी तालिका बिल्कुल सामान्य तालिका के रूप में व्यवहार करती है। उपयोगकर्ता के दृष्टिकोण से एक अस्थायी तालिका और वास्तविक तालिका के बीच एकमात्र अंतर यह है कि सत्र समाप्त होने के बाद सभी पंक्तियों को हटा दिया जाता है और कोई अन्य सत्र सत्र द्वारा प्रयुक्त तालिका की सामग्री को नहीं पढ़ सकता है। प्रति सत्र तालिका का एक उदाहरण है; दो सत्र एक ही समय में एक ही अस्थायी तालिका का उपयोग कर सकते हैं और बिना किसी संघर्ष के, पंक्तियों के दो अलग-अलग सेट होते हैं।
हंस डेरगन

-2

TATE तालिका_temp_list_objects के रूप में बनाएँ

O.owner का चयन करें, o.object_name से sys.all_objects o WHERE o.object_type = 'TABLE';


कृपया अपना उत्तर प्रारूपित करें। अच्छा होगा कि आप अपने कोड के बारे में कुछ लिखें।
छात्रावास
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.