ฉันได้ยินคนพูดถึงตารางนี้และไม่แน่ใจว่ามันเกี่ยวกับอะไร
ฉันได้ยินคนพูดถึงตารางนี้และไม่แน่ใจว่ามันเกี่ยวกับอะไร
คำตอบ:
มันเป็นตารางจำลองที่มีระเบียนเดียวที่ใช้สำหรับการเลือกเมื่อคุณไม่ได้สนใจข้อมูลจริงๆ แต่ต้องการผลลัพธ์ของฟังก์ชันระบบบางอย่างในคำสั่ง select:
เช่น select sysdate from dual;
มันเป็นตารางจำลองที่มีองค์ประกอบหนึ่งอยู่ในนั้น มันมีประโยชน์เพราะ Oracle ไม่อนุญาตข้อความเช่นนั้น
SELECT 3+4
คุณสามารถแก้ไขข้อ จำกัด นี้ได้ด้วยการเขียน
SELECT 3+4 FROM DUAL
แทน.
จากวิกิพีเดีย
ประวัติศาสตร์
ตาราง DUAL ถูกสร้างโดย Chuck Weiss ของ บริษัท Oracle เพื่อจัดทำตารางสำหรับการเข้าร่วมในมุมมองภายใน:
ฉันสร้างตาราง DUAL เป็นวัตถุพื้นฐานใน Oracle Data Dictionary มันไม่ได้ตั้งใจที่จะมองเห็นตัวเอง แต่แทนที่จะใช้ในมุมมองที่คาดว่าจะมีการสอบถาม แนวคิดคือคุณสามารถเข้าร่วมกับตาราง DUAL และสร้างสองแถวในผลลัพธ์สำหรับทุก ๆ แถวในตารางของคุณ จากนั้นโดยใช้ GROUP BY การสรุปผลการเข้าร่วมสามารถสรุปเพื่อแสดงจำนวนของหน่วยเก็บสำหรับขอบเขตข้อมูลและสำหรับขอบเขตดัชนี ชื่อ DUAL ดูเหมือนจะเหมาะสำหรับกระบวนการสร้างแถวหนึ่งแถวจากแถวเดียว 1
อาจไม่ชัดเจนจากด้านบน แต่ตาราง DUAL ดั้งเดิมมีสองแถวในนั้น (ชื่อจึงเป็น) ทุกวันนี้มีแถวเดียวเท่านั้น
การเพิ่มประสิทธิภาพ
DUAL เดิมเป็นตารางและเอ็นจิ้นฐานข้อมูลจะทำดิสก์ IO บนตารางเมื่อเลือกจาก DUAL ดิสก์ IO นี้มักจะเป็นตรรกะ IO (ไม่เกี่ยวข้องกับการเข้าถึงดิสก์ทางกายภาพ) เนื่องจากบล็อกดิสก์มักจะถูกแคชในหน่วยความจำ สิ่งนี้ส่งผลให้โลจิคัล IO จำนวนมากเทียบกับตาราง DUAL
ฐานข้อมูล Oracle รุ่นที่ใหม่กว่าได้รับการปรับให้เหมาะสมและฐานข้อมูลจะไม่ทำการฟิสิคัลหรือตรรกะ IO บนตาราง DUAL อีกต่อไปแม้ว่าตาราง DUAL จะยังคงมีอยู่จริง
ฉันคิดว่าบทความวิกิพีเดียอาจช่วยชี้แจงได้
http://en.wikipedia.org/wiki/DUAL_table
ตาราง DUAL เป็นตารางหนึ่งแถวพิเศษที่มีอยู่ตามค่าเริ่มต้นในการติดตั้งฐานข้อมูล Oracle ทั้งหมด เหมาะสำหรับใช้ในการเลือกนามแฝงเช่น SYSDATE หรือ USER ตารางนี้มีคอลัมน์ VARCHAR2 (1) คอลัมน์เดียวที่เรียกว่า DUMMY ที่มีค่า "X"
เป็นตารางพิเศษใน Oracle ฉันมักจะใช้สำหรับการคำนวณหรือตรวจสอบตัวแปรระบบ ตัวอย่างเช่น:
Select 2*4 from dual
พิมพ์ผลการคำนวณSelect sysdate from dual
พิมพ์วันที่ปัจจุบันของเซิร์ฟเวอร์ ชนิดของตารางหลอกคุณสามารถเรียกใช้คำสั่งต่อต้านและรับผลลัพธ์กลับมาเช่น sysdate นอกจากนี้ยังช่วยให้คุณตรวจสอบว่า Oracle ขึ้นและตรวจสอบไวยากรณ์ของ sql หรือไม่
ตารางยูทิลิตี้ใน Oracle ที่มีเพียง 1 แถวและ 1 คอลัมน์ มันถูกใช้เพื่อดำเนินการทางคณิตศาสตร์จำนวนหนึ่งและสามารถนำมาใช้โดยทั่วไปที่หนึ่งต้องสร้างผลลัพธ์ที่รู้จัก
SELECT * จาก dual;
จะให้แถวเดี่ยวโดยมีคอลัมน์เดียวชื่อ "DUMMY" และค่า "X" ตามที่แสดงที่นี่:
DUMMY ----- X
ข้อเท็จจริงเพิ่มเติมเกี่ยวกับ DUAL ....
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1562813956388
การทดลองที่น่าตื่นเต้นทำที่นี่และคำอธิบายที่น่าตื่นเต้นเพิ่มเติมโดยทอม
ตาราง DUAL เป็นตารางหนึ่งแถวพิเศษที่มีอยู่ตามค่าเริ่มต้นในการติดตั้งฐานข้อมูล Oracle ทั้งหมด เหมาะสำหรับใช้ในการเลือกนามแฝงเช่น SYSDATE หรือ USER
ตารางมีคอลัมน์ VARCHAR2 (1) เดียวชื่อ DUMMY ที่มีค่าเป็น "X"
คุณสามารถอ่านทั้งหมดได้ที่http://en.wikipedia.org/wiki/DUAL_table
DUAL เป็นสิ่งจำเป็นในการพัฒนา PL / SQL สำหรับการใช้ฟังก์ชั่นที่มีเฉพาะใน SQL
เช่น
DECLARE
x XMLTYPE;
BEGIN
SELECT xmlelement("hhh", 'stuff')
INTO x
FROM dual;
END;
มันเป็นวัตถุที่จะนำแถวที่ว่างเปล่ากลับมา 1 ตัวอย่างเช่น: เลือก 1 จากคู่ ส่งคืน 1
เลือก 21 + 44 จากคู่; ผลตอบแทน 65
เลือก [ลำดับ] .nextval จากคู่; ส่งคืนค่าถัดไปจากลำดับ
ส่วนใหญ่เราใช้เพื่อรับหมายเลขถัดไปจากลำดับ
ไวยากรณ์: SELECT 'sequence_name'.NEXTVAL FROM DUAL
สิ่งนี้จะคืนค่าคอลัมน์หนึ่งคอลัมน์ (ชื่อคอลัมน์ NEXTVAL)
อีกสถานการณ์ที่ต้องการ select ... from dual
คือเมื่อเราต้องการดึงรหัส (data definition) สำหรับวัตถุฐานข้อมูลที่แตกต่างกัน (เช่น Table, FUNCTION, TRIGGER, PACKAGE) โดยใช้DBMS_METADATA.GET_DDL
ฟังก์ชันbuilt in :
select DBMS_METADATA.GET_DDL('TABLE','<table_name>') from DUAL;
select DBMS_METADATA.GET_DDL('FUNCTION','<function_name>') from DUAL;
ในความเป็นจริงที่ทุกวันนี้ IDEs เสนอความสามารถในการดู DDL ของตาราง แต่ในสภาพแวดล้อมที่ง่ายกว่าเช่น SQL Plus สิ่งนี้มีประโยชน์จริง ๆ
แก้ไข
สถานการณ์ทั่วไปมากขึ้น: โดยทั่วไปเมื่อเราต้องการใช้โพรซีเดอร์ PL / SQL ภายในคำสั่ง SQL มาตรฐานหรือเมื่อเราต้องการเรียกโพรซีเดอร์จากบรรทัดคำสั่ง:
select my_function(<input_params>) from dual;
สูตรทั้งสองนำมาจากหนังสือ 'Oracle PL / SQL Recipes' โดย Josh Juneau และ Matt Arena
DUAL เป็นหนึ่งแถวพิเศษตารางหนึ่งคอลัมน์จะมีอยู่ในฐานข้อมูล Oracle ทั้งหมด เจ้าของ DUAL คือ SYS
DUAL เป็นตารางที่สร้างขึ้นโดยอัตโนมัติโดย Oracle Database พร้อมกับฟังก์ชั่นข้อมูล มันมักจะใช้เพื่อรับฟังก์ชั่นระบบปฏิบัติการ (เช่นวันที่เวลาการแสดงออกทางคณิตศาสตร์ ฯลฯ )
SELECT SYSDATE from dual;