Di Oracle, tabel sementara global dikenal sebagai tabel sesi dan kami menggunakan tabel sementara global untuk menyimpan data sementara di dalamnya saat memproses. Di bawah ini adalah contohnya.
Buat Tabel Sementara Global
Di sini kita akan membuat tabel sementara global untuk menampung total gaji departemen dari tabel EMP. Anda dapat mengunduh tabel EMP dan datanya untuk tujuan pengujian dari tautan berikut Tabel Skema SCOTT. Juga, pada contoh di bawah ini, kami membuat tabel dengan ON COMMIT DELETE ROWS klausa, untuk menghapus baris setiap kali pernyataan Komit dieksekusi dalam prosedur. Anda juga dapat menggunakan ON COMMIT PRESERVE BARIS klausa untuk mempertahankan baris ke dalam tabel hingga sesi aktif.
CREATE GLOBAL TEMPORARY TABLE temp_dept ( deptno NUMBER (4), dname VARCHAR2 (50), sal NUMBER ) ON COMMIT DELETE ROWS;
Contoh Penggunaan Tabel Sementara Global dalam Prosedur Oracle
Prosedur berikut akan mengambil total gaji dari masing-masing departemen dan akan mengisi tabel temp_dept. Kemudian akan memilih catatan dari tabel temp_dept dan akan memperbarui kolom komisi tabel EMP dengan 2% dari total gaji departemen.
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;
Uji
SET SERVEROUTPUT ON; BEGIN prc_dept; END; /
Keluaran
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.
Lihat juga:
- Tipe Tabel dalam Contoh Prosedur Tersimpan
- Bagaimana Membandingkan dua objek di Oracle?