Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Bagaimana Cara Menggunakan Tabel Sementara Global dalam Prosedur Oracle?

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?

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SUBSTR() Fungsi di Oracle

  2. UNPIVOT pada jumlah kolom tak tentu

  3. Cara Membuat Prosedur Tersimpan PL/SQL Dengan Parameter Di Database Oracle

  4. Bagaimana Cara Menghasilkan Paket Tabel API di Oracle SQL Developer?

  5. Penggabungan String Agregat di Oracle 10g