Tôi muốn tạo một bảng tạm thời trong cơ sở dữ liệu Oracle
cái gì đó như
Declare table @table (int id)
Trong máy chủ SQL
Và sau đó điền nó bằng một câu lệnh chọn
Có khả thi không?
Cảm ơn
Câu trả lời:
Đúng, Oracle có các bảng tạm thời. Đây là một liên kết đến một bài báo của AskTom mô tả chúng và đây là tài liệu chính thức của oracle CREATE TABLE.
Tuy nhiên, trong Oracle, chỉ dữ liệu trong bảng tạm thời là tạm thời. Bảng là một đối tượng thông thường hiển thị cho các phiên khác. Thường xuyên tạo và thả các bảng tạm thời trong Oracle là một thói quen xấu.
CREATE GLOBAL TEMPORARY TABLE today_sales(order_id NUMBER)
ON COMMIT PRESERVE ROWS;
Oracle 18c đã thêm các bảng tạm thời riêng tư, là các đối tượng trong bộ nhớ một phiên. Xem tài liệu để biết thêm chi tiết. Các bảng tạm thời riêng tư có thể được tạo và loại bỏ động.
CREATE PRIVATE TEMPORARY TABLE ora$ptt_today_sales AS
SELECT * FROM orders WHERE order_date = SYSDATE;
Bảng tạm thời có thể hữu ích nhưng chúng thường bị lạm dụng trong Oracle. Chúng thường có thể tránh được bằng cách kết hợp nhiều bước vào một câu lệnh SQL duy nhất sử dụng các dạng xem nội tuyến.
CREATE TABLE AS SELECT
: chọn từ các bảng từ xa có cột LOB, vì bạn không thể trực tiếp SELECT
từ chúng. Tôi đang viết một thủ tục để sao chép các bản ghi từ cơ sở dữ liệu từ xa và đây là giải pháp của tôi: đưa các bản ghi vào GTT, rồi sao chép từ đó vào bảng "thực".
Chỉ là một mẹo .. Các bảng tạm thời trong Oracle khác với SQL Server. Bạn tạo nó MỘT LẦN và chỉ MỘT LẦN, không phải mọi phiên. Các hàng bạn chèn vào đó chỉ hiển thị với phiên của bạn và tự động bị xóa (tức là TRUNCATE
không DROP
) khi bạn kết thúc phiên của mình (hoặc kết thúc giao dịch, tùy thuộc vào điều khoản "ON COMMIT" mà bạn sử dụng).
DELETED
, không phải DROP
ped.
CREATE GLOBAL TEMPORARY TABLE Table_name
(startdate DATE,
enddate DATE,
class CHAR(20))
ON COMMIT DELETE ROWS;
ON COMMIT DELETE ROWS
có nghĩa là chúng sẽ bị loại bỏ sớm hơn, nếu bạn cam kết tăng dần trong một phiên.