ฉันต้องการสร้างตารางชั่วคราวในฐานข้อมูล Oracle
สิ่งที่ต้องการ
Declare table @table (int id)
ในเซิร์ฟเวอร์ SQL
แล้วเติมด้วยคำสั่งเลือก
เป็นไปได้ไหม?
ขอบคุณ
ฉันต้องการสร้างตารางชั่วคราวในฐานข้อมูล Oracle
สิ่งที่ต้องการ
Declare table @table (int id)
ในเซิร์ฟเวอร์ SQL
แล้วเติมด้วยคำสั่งเลือก
เป็นไปได้ไหม?
ขอบคุณ
คำตอบ:
ใช่ Oracle มีตารางชั่วคราว นี่คือลิงค์ไปยังบทความAskTom ที่อธิบายถึงพวกเขาและนี่คือเอกสาร Oracle CREATE TABLE อย่างเป็นทางการ
อย่างไรก็ตามใน Oracle เฉพาะข้อมูลในตารางชั่วคราวเท่านั้นที่เป็นข้อมูลชั่วคราว ตารางเป็นวัตถุปกติที่เซสชันอื่นมองเห็นได้ การสร้างและวางตารางชั่วคราวใน Oracle เป็นแนวทางปฏิบัติที่ไม่ดี
CREATE GLOBAL TEMPORARY TABLE today_sales(order_id NUMBER)
ON COMMIT PRESERVE ROWS;
Oracle 18c เพิ่มตารางส่วนตัวชั่วคราวซึ่งเป็นอ็อบเจ็กต์ในหน่วยความจำเซสชันเดียว ดูเอกสารสำหรับรายละเอียดเพิ่มเติม ตารางชั่วคราวส่วนตัวสามารถสร้างและทิ้งแบบไดนามิกได้
CREATE PRIVATE TEMPORARY TABLE ora$ptt_today_sales AS
SELECT * FROM orders WHERE order_date = SYSDATE;
ตารางชั่วคราวอาจมีประโยชน์ แต่มักถูกใช้ในทางที่ผิดใน Oracle มักจะหลีกเลี่ยงได้โดยการรวมหลายขั้นตอนไว้ในคำสั่ง SQL เดียวโดยใช้มุมมองแบบอินไลน์
CREATE TABLE AS SELECT
: เลือกจากตารางระยะไกลที่มีคอลัมน์ลอบเนื่องจากคุณไม่สามารถโดยตรงSELECT
จากพวกเขา ฉันกำลังเขียนขั้นตอนในการคัดลอกระเบียนจากฐานข้อมูลระยะไกลและนี่คือวิธีแก้ปัญหาของฉัน: นำระเบียนไปไว้ใน GTT แล้วคัดลอกจากนั้นไปยังตาราง "จริง"
เคล็ดลับ .. ตารางชั่วคราวใน Oracle แตกต่างจาก SQL Server คุณสร้างครั้งเดียวและครั้งเดียวไม่ใช่ทุกเซสชัน แถวที่คุณแทรกเข้าไปจะมองเห็นได้เฉพาะเซสชันของคุณและจะถูกลบโดยอัตโนมัติ (กล่าวคือTRUNCATE
ไม่ใช่DROP
) เมื่อคุณสิ้นสุดเซสชันของคุณ (หรือสิ้นสุดธุรกรรมขึ้นอยู่กับประโยค "ON COMMIT" ที่คุณใช้)
DELETED
ไม่ใช่DROP
เหยียบ
CREATE GLOBAL TEMPORARY TABLE Table_name
(startdate DATE,
enddate DATE,
class CHAR(20))
ON COMMIT DELETE ROWS;
ON COMMIT DELETE ROWS
หมายความว่าสิ่งเหล่านี้จะถูกยกเลิกเร็วขึ้นหากคุณกระทำทีละน้อยในระหว่างเซสชัน
สร้างตาราง table_temp_list_objects AS
เลือก o.owner, o.object_name FROM sys.all_objects o WHERE o.object_type = 'TABLE';