के दौरान वृद्धिशील संख्यात्मक कॉलम मान उत्पन्न करना मुझे नई तालिका में एक संख्यात्मक कॉलम के लिए वृद्धिशील मान उत्पन्न करते समय, ओरेकल में एक तालिका से दूसरे डेटा को कॉपी करने की आवश्यकता है। यह पंक्तियों की एक छोटी संख्या (100) के साथ एकमात्र व्यायाम है।INSERT SELECT कथन
मेरे पास इस समस्या का पर्याप्त समाधान है लेकिन मुझे यह जानकर उत्सुकता है कि क्या कोई और शानदार तरीका है।
मैं एक अस्थायी अनुक्रम के साथ यह कर रहा हूँ तो जैसे:
CREATE SEQUENCE temp_seq
START WITH 1;
INSERT INTO new_table (new_col, copied_col1, copied_col2)
SELECT temp_seq.NEXTVAL, o.*
FROM (SELECT old_col1, old_col2
FROM old_table,
ORDER BY old_col1) o;
DROP SEQUENCE temp_seq;
वहाँ से कोई लेना देना रास्ता अनुक्रम या किसी अन्य अस्थायी वस्तु बनाने के बिना है? विशेष रूप से, क्या यह स्वयं निहित इंसर्ट चयन कथन के साथ किया जा सकता है?
कृपया एक ट्रिगर को एक गैर-विकल्प होने पर विचार करें।
अधिक जानकारी: मैं आदेश को नियंत्रित करने के कि नई पंक्तियाँ डाला जाता है चाहते हैं, और यह एक ही क्रम में वे पुराने तालिका (ध्यान दें में बनाये गये थे मैं ऊपर ORDER BY खंड जोड़ दिया है नहीं होगा)। लेकिन मैं अब भी अपना नया अनुक्रमिक कॉलम 1 से शुरू करना चाहता हूं।
इसी तरह के प्रश्न हैं, लेकिन मुझे विश्वास है कि मेरे प्रश्न के विनिर्देश SO के लिए मूल हैं।
पीटर, अतिरिक्त मानदंड देखें जो मैंने प्रश्न जोड़ा है। यह विधि पुरानी तालिका में बनाए गए क्रम में पंक्तियों को सम्मिलित करने लगती है, लेकिन मैं अपना ऑर्डर लागू करना चाहता हूं। यदि इस आवश्यकता के लिए नहीं, तो आपकी विधि सही होगी। कोई विचार? –
@ चार्ल्स: मेरी क्वेरी वास्तव में पंक्तियों को सॉर्ट नहीं करती है, इसलिए यह संभव है कि वे बनाए गए क्रम में डाले गए हों (लेकिन गारंटी नहीं है)। क्या आपने अपनी क्वेरी में 'ORDER BY' लागू करने का प्रयास किया है? मैं यह काम करने की उम्मीद करता हूँ। –
फिर चयन कथन में ORDER जोड़ें। आपको वह चाहिए जो आप चाहते हैं। ROWNUM बस पुनर्प्राप्त आदेश में रिकॉर्ड्स के लिए अनुक्रम संख्या उत्पन्न करता है। – DCookie