In Oracle, tabelle temporanee globali note come tabelle di sessione e utilizziamo tabelle temporanee globali per conservare temporaneamente i dati durante l'elaborazione. Quello che segue è un esempio.
Crea una tabella temporanea globale
Qui creeremo una tabella temporanea globale per trattenere lo stipendio totale saggio del dipartimento dalla tabella EMP. Puoi scaricare la tabella EMP e i dati a scopo di test dal seguente link SCOTT Schema Tables. Inoltre, nell'esempio seguente, stiamo creando la tabella con ON COMMIT DELETE ROWS clausola, per eliminare le righe ogni volta che viene eseguita un'istruzione Commit nella procedura. Puoi anche utilizzare ON COMMIT PRESERVE ROWS clausola per preservare le righe nella tabella fino a quando la sessione non è attiva.
CREATE GLOBAL TEMPORARY TABLE temp_dept ( deptno NUMBER (4), dname VARCHAR2 (50), sal NUMBER ) ON COMMIT DELETE ROWS;
Esempio di utilizzo della tabella temporanea globale nella procedura Oracle
La procedura seguente prenderà lo stipendio totale da ciascun dipartimento e compilerà la tabella temp_dept. Quindi prenderà i record da una tabella temp_dept e aggiornerà la colonna delle commissioni della tabella EMP con il 2% dello stipendio totale del dipartimento.
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;
Test
SET SERVEROUTPUT ON; BEGIN prc_dept; END; /
Uscita
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.
Vedi anche:
- Tipo di tabella nell'esempio di stored procedure
- Come confrontare due oggetti in Oracle?