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

Oracle प्रक्रिया में वैश्विक अस्थायी तालिका का उपयोग कैसे करें?

Oracle में, वैश्विक अस्थायी तालिकाओं को सत्र तालिकाओं के रूप में जाना जाता है और हम प्रसंस्करण के दौरान डेटा को अस्थायी रूप से रखने के लिए वैश्विक अस्थायी तालिकाओं का उपयोग करते हैं। नीचे एक उदाहरण है।

वैश्विक अस्थायी तालिका बनाएं

यहां हम ईएमपी तालिका से विभागवार कुल वेतन रखने के लिए एक वैश्विक अस्थायी तालिका तैयार करेंगे। आप EMP तालिका और डेटा डाउनलोड कर सकते हैं निम्नलिखित लिंक SCOTT स्कीमा टेबल्स से परीक्षण के उद्देश्य के लिए। साथ ही, नीचे दिए गए उदाहरण में, हम ON COMMIT DELETE ROWS के साथ तालिका बना रहे हैं क्लॉज, जब भी कोई कमिट स्टेटमेंट प्रक्रिया में निष्पादित होता है तो पंक्तियों को हटाने के लिए। आप प्रतिबद्ध संरक्षित पंक्तियों पर . का भी उपयोग कर सकते हैं सत्र के सक्रिय होने तक पंक्तियों को तालिका में सुरक्षित रखने के लिए खंड।

CREATE GLOBAL TEMPORARY TABLE temp_dept
(
deptno NUMBER (4),
dname VARCHAR2 (50),
sal NUMBER
)
ON COMMIT DELETE ROWS;

Oracle प्रक्रिया में वैश्विक अस्थायी तालिका का उपयोग करने का उदाहरण

निम्नलिखित प्रक्रिया प्रत्येक विभाग से कुल वेतन लेगी और temp_dept तालिका को पॉप्युलेट करेगी। फिर एक temp_dept तालिका से रिकॉर्ड चुनेंगे और EMP तालिका कमीशन कॉलम को कुल विभाग वेतन के 2% के साथ अपडेट करेंगे।

CREATE OR REPLACE PROCEDURE prc_dept
IS
CURSOR c_emp
IS
SELECT e.deptno, d.dname, SUM (e.sal) tot_sal
FROM emp e, dept d
WHERE e.deptno = d.deptno
GROUP BY e.deptno, d.dname;

n_count NUMBER := 0;
BEGIN
FOR c IN c_emp
LOOP
/* Inserting records into temp table */
INSERT INTO temp_dept (deptno, dname, sal)
VALUES (c.deptno, c.dname, c.tot_sal);
END LOOP;

/* Now get the records from temp table and update the EMP table */
FOR c IN (SELECT deptno, dname, sal FROM temp_dept)
LOOP
/* Updating the EMP table commission column to set 2% of total department wise salary*/
UPDATE emp
SET comm = c.sal * 2 / 100
WHERE emp.deptno = c.deptno;

DBMS_OUTPUT.put_line( 'Commission amount '
|| (c.sal * 2 / 100)
|| ' updated for department '
|| c.dname);
END LOOP;

/* Save the EMP table changes and this will also remove the records from temp_dept table*/
COMMIT;

/* Checking temporary table records count for testing */
SELECT COUNT ( * ) INTO n_count FROM temp_dept;

DBMS_OUTPUT.put_Line ('Records in Temp table: ' || n_count);
END;
से n_count में सेलेक्ट करें (*)

परीक्षा

SET SERVEROUTPUT ON;

BEGIN
prc_dept;
END;
/

आउटपुट

Commission amount 175 updated for department ACCOUNTING
Commission amount 217.5 updated for department RESEARCH
Commission amount 188 updated for department SALES
Records in Temp table: 0
PL/SQL procedure successfully completed.

यह भी देखें:

  • संग्रहीत प्रक्रिया उदाहरण में तालिका प्रकार
  • Oracle में दो वस्तुओं की तुलना कैसे करें?

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ट्रिगर के अंदर अपवाद कैसे बढ़ाएं? क्या इसे करने का कोई तरीका है?

  2. एसक्यूएल में इन्वेंटरी औसत लागत गणना

  3. Oracle में ABS () फ़ंक्शन

  4. ऑरैकल डेटाबेस से यादृच्छिक रूप से रिकॉर्ड कैसे प्राप्त करें?

  5. Oracle SQL में सभी टाइमस्टैम्प रिकॉर्ड के बीच औसत प्रसंस्करण समय खोजने की आवश्यकता है