Tại sao bạn muốn tạo một bảng tạm thời trong một thủ tục được lưu trữ ngay từ đầu?
Việc tạo các bảng tạm thời trong các cơ sở dữ liệu khác là tương đối phổ biến (ví dụ:SQL Server và MySQL). Rất hiếm khi làm điều tương tự trong Oracle. Trong hầu hết mọi trường hợp bạn muốn tạo một bảng tạm thời trong Oracle, có một cách tiếp cận kiến trúc tốt hơn. Có một chủ đề trên ngăn xếp DBA thảo luận về lựa chọn thay thế cho bảng tạm thời và tại sao chúng không được sử dụng phổ biến trong Oracle.
Theo chương trình, bạn có thể tạo các đối tượng bằng cách sử dụng SQL động
CREATE OR REPLACE PROCEDURE dont_do_this
AS
BEGIN
EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE a( id INTEGER )';
END;
Tuy nhiên, nếu bạn tạo một bảng tạm thời động, mọi tham chiếu đến bảng đó cũng sẽ cần phải thông qua SQL động - bạn sẽ không thể viết SELECT
đơn giản các câu lệnh chống lại bảng. Và định nghĩa của một bảng tạm thời trong Oracle là toàn cầu nên nó được hiển thị cho mọi phiên. Nếu bạn có hai phiên khác nhau cùng cố gắng tạo cùng một bảng, phiên thứ hai sẽ gặp lỗi. Nếu bạn mong đợi bảng có một định nghĩa khác trong các phiên khác nhau, bạn thậm chí còn gặp nhiều vấn đề hơn.