Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

Oracle:किसी अन्य तालिका में पंक्ति प्रकार डेटा सम्मिलित करें

एक पंक्ति डालने के लिए-

DECLARE
   v_record event%rowtype;
BEGIN 
   SELECT * INTO v_record from event where rownum=1; --or whatever where clause
   Insert into tmp_event values v_record;
END;

या event . से सभी पंक्तियों को सम्मिलित करने के लिए अधिक विस्तृत संस्करण -

DECLARE
  TYPE t_bulk_collect_test_tab IS TABLE OF event%ROWTYPE;

  l_tab t_bulk_collect_test_tab;

  CURSOR c_data IS
    SELECT *
    FROM event;
BEGIN
  OPEN c_data;
  LOOP
    FETCH c_data
    BULK COLLECT INTO l_tab LIMIT 10000;
    EXIT WHEN l_tab.count = 0;

    -- Process contents of collection here.
    Insert into tmp_event values v_record;
  END LOOP;
  CLOSE c_data;
END;
/

एक ट्रिगर में, हाँ यह संभव है लेकिन यह चिकन या अंडे की तरह है। आपको rowtype . के हर क्षेत्र को इनिशियलाइज़ करना होगा :new . के साथ स्तंभ मान जैसे-

v_record.col1 := :new.col1;
v_record.col2 := :new.col2;
v_record.col3 := :new.col3;
....

जाहिर है, उपरोक्त पीएलएसक्यूएल उदाहरणों का उपयोग ट्रिगर में नहीं किया जा सकता है क्योंकि यह एक उत्परिवर्तित ट्रिगर त्रुटि फेंक देगा। और जैसा कि मैंने ऊपर बताया है, प्रत्येक कॉलम को अलग से एक्सेस करने के अलावा आपके लिए ट्रिगर में पूरी पंक्ति प्राप्त करने का कोई अन्य तरीका नहीं है, इसलिए यदि आप यह सब करते हैं तो सीधे :new.col का उपयोग क्यों न करें। INSERT into temp_event . में स्वयं, आपको बहुत काम बचाएगा।

इसके अलावा, चूंकि आप कहते हैं कि सभी स्तंभों का उल्लेख करना बहुत काम है, (Oracle 11gR2 में) ) यहां INSERT . जनरेट करके ऐसा करने का एक त्वरित तरीका दिया गया है कथन और इसे गतिशील रूप से निष्पादित करना (हालांकि प्रदर्शन के लिए परीक्षण नहीं किया गया)।

CREATE OR REPLACE TRIGGER event_air --air stands for "after insert of row"
AFTER INSERT ON EVENT
FOR EACH ROW
   L_query varchar2(2000);   --size it appropriately
BEGIN

   SELECT 'INSERT INTO tmp_event VALUES ('|| listagg (':new.'||column_name, ',') 
                                           WITHIN GROUP (ORDER BY column_name) ||')' 
     INTO l_query
     FROM all_tab_columns
    WHERE table_name='EVENT';

   EXECUTE IMMEDIATE l_query;

EXCEPTION
    WHEN OTHERS THEN
        --Meaningful exception handling here
END;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle में स्ट्रिंग एकत्रीकरण:एकल कॉलम में एकाधिक पंक्तियाँ

  2. क्या पीएल/एसक्यूएल में स्ट्रिंग को विभाजित करने के लिए कोई फ़ंक्शन है?

  3. SQL:दो तालिकाओं का संघ जिसमें पूर्ण स्तंभ मिलान नहीं है

  4. आप ओएसएक्स हिम तेंदुए पर पर्ल डीबीडी ::ओरेकल कैसे स्थापित करते हैं 10.6

  5. किसी अन्य उपयोगकर्ता के टेबल पर अधिकार प्रदान करने के लिए Oracle PL/SQL संग्रहीत कार्यविधि का उपयोग करना