Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Làm thế nào để sử dụng bảng tạm thời toàn cục trong thủ tục Oracle?

Trong Oracle, các bảng tạm thời toàn cục được gọi là bảng phiên và chúng tôi sử dụng các bảng tạm thời toàn cầu để giữ dữ liệu tạm thời trong đó trong khi xử lý. Dưới đây là một ví dụ.

Tạo bảng tạm thời chung

Ở đây, chúng tôi sẽ tạo một bảng tạm thời toàn cầu để nắm giữ tổng mức lương khôn ngoan của bộ phận từ bảng EMP. Bạn có thể tải xuống bảng EMP và dữ liệu cho mục đích thử nghiệm từ liên kết sau Bảng lược đồ SCOTT. Ngoài ra, trong ví dụ dưới đây, chúng tôi đang tạo bảng với BẬT LỆNH XÓA CAM KẾT , để xóa các hàng bất cứ khi nào câu lệnh Cam kết được thực thi trong thủ tục. Bạn cũng có thể sử dụng BẬT LỆNH BẢO QUẢN CAM KẾT mệnh đề để bảo toàn các hàng trong bảng cho đến khi phiên hoạt động.

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

Ví dụ để sử dụng bảng tạm thời toàn cục trong thủ tục Oracle

Quy trình sau đây sẽ lấy tổng lương từ từng bộ phận và sẽ điền vào bảng temp_dept. Sau đó, sẽ chọn các bản ghi từ bảng temp_dept và sẽ cập nhật cột hoa hồng của bảng EMP với 2% tổng tiền lương của bộ phận.

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;

Kiểm tra

SET SERVEROUTPUT ON;

BEGIN
prc_dept;
END;
/

Đầu ra

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.

Xem thêm:

  • Loại bảng trong ví dụ về thủ tục đã lưu trữ
  • Làm thế nào để so sánh hai đối tượng trong 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. Tôi không hiểu đối chiếu? (Mysql, RDBMS, Bộ ký tự)

  2. Oracle:Nhập tệp CSV

  3. Gợi ý Oracle WITH và MATERIALIZE hoạt động như một giao dịch tự trị cho các hàm

  4. Cách định dạng số phủ định với dấu ngoặc nhọn trong Oracle

  5. Kiểm thử đơn vị cho PL / SQL