Oracle ตารางคู่คืออะไร


229

ฉันได้ยินคนพูดถึงตารางนี้และไม่แน่ใจว่ามันเกี่ยวกับอะไร


2
asktom.oracle.com/pls/asktom/…รายละเอียดเกี่ยวกับ dual
SriniV

ans ที่ดีที่สุดอยู่ที่นี่ทุกอย่างเกี่ยวกับสองasktom.oracle.com/pls/asktom/ ......ผู้คนไม่ให้ความสนใจกับลิงค์ความคิดเห็นข้างต้นนั่นคือเหตุผลที่ฉันกำลังแสดงความคิดเห็นที่นี่ .. ได้ดูที่คุณจะไม่เสียใจ
Varun

คำตอบ:


229

มันเป็นตารางจำลองที่มีระเบียนเดียวที่ใช้สำหรับการเลือกเมื่อคุณไม่ได้สนใจข้อมูลจริงๆ แต่ต้องการผลลัพธ์ของฟังก์ชันระบบบางอย่างในคำสั่ง select:

เช่น select sysdate from dual;

ดูhttp://www.adp-gmbh.ch/ora/misc/dual.html


79

มันเป็นตารางจำลองที่มีองค์ประกอบหนึ่งอยู่ในนั้น มันมีประโยชน์เพราะ Oracle ไม่อนุญาตข้อความเช่นนั้น

 SELECT 3+4

คุณสามารถแก้ไขข้อ จำกัด นี้ได้ด้วยการเขียน

 SELECT 3+4 FROM DUAL

แทน.


70

จากวิกิพีเดีย

ประวัติศาสตร์

ตาราง 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 จะยังคงมีอยู่จริง


21

ฉันคิดว่าบทความวิกิพีเดียอาจช่วยชี้แจงได้

http://en.wikipedia.org/wiki/DUAL_table

ตาราง DUAL เป็นตารางหนึ่งแถวพิเศษที่มีอยู่ตามค่าเริ่มต้นในการติดตั้งฐานข้อมูล Oracle ทั้งหมด เหมาะสำหรับใช้ในการเลือกนามแฝงเช่น SYSDATE หรือ USER ตารางนี้มีคอลัมน์ VARCHAR2 (1) คอลัมน์เดียวที่เรียกว่า DUMMY ที่มีค่า "X"


10

เป็นตารางพิเศษใน Oracle ฉันมักจะใช้สำหรับการคำนวณหรือตรวจสอบตัวแปรระบบ ตัวอย่างเช่น:

  • Select 2*4 from dual พิมพ์ผลการคำนวณ
  • Select sysdate from dual พิมพ์วันที่ปัจจุบันของเซิร์ฟเวอร์

4

ชนิดของตารางหลอกคุณสามารถเรียกใช้คำสั่งต่อต้านและรับผลลัพธ์กลับมาเช่น sysdate นอกจากนี้ยังช่วยให้คุณตรวจสอบว่า Oracle ขึ้นและตรวจสอบไวยากรณ์ของ sql หรือไม่


4

ตารางยูทิลิตี้ใน Oracle ที่มีเพียง 1 แถวและ 1 คอลัมน์ มันถูกใช้เพื่อดำเนินการทางคณิตศาสตร์จำนวนหนึ่งและสามารถนำมาใช้โดยทั่วไปที่หนึ่งต้องสร้างผลลัพธ์ที่รู้จัก

SELECT * จาก dual;

จะให้แถวเดี่ยวโดยมีคอลัมน์เดียวชื่อ "DUMMY" และค่า "X" ตามที่แสดงที่นี่:

DUMMY
----- 
X


2

ตาราง DUAL เป็นตารางหนึ่งแถวพิเศษที่มีอยู่ตามค่าเริ่มต้นในการติดตั้งฐานข้อมูล Oracle ทั้งหมด เหมาะสำหรับใช้ในการเลือกนามแฝงเช่น SYSDATE หรือ USER

ตารางมีคอลัมน์ VARCHAR2 (1) เดียวชื่อ DUMMY ที่มีค่าเป็น "X"

คุณสามารถอ่านทั้งหมดได้ที่http://en.wikipedia.org/wiki/DUAL_table


1

DUAL เป็นสิ่งจำเป็นในการพัฒนา PL / SQL สำหรับการใช้ฟังก์ชั่นที่มีเฉพาะใน SQL

เช่น

DECLARE
x XMLTYPE;
BEGIN
SELECT xmlelement("hhh", 'stuff')
INTO x
FROM dual;
END;

0

มันเป็นวัตถุที่จะนำแถวที่ว่างเปล่ากลับมา 1 ตัวอย่างเช่น: เลือก 1 จากคู่ ส่งคืน 1

เลือก 21 + 44 จากคู่; ผลตอบแทน 65

เลือก [ลำดับ] .nextval จากคู่; ส่งคืนค่าถัดไปจากลำดับ


0

ส่วนใหญ่เราใช้เพื่อรับหมายเลขถัดไปจากลำดับ

ไวยากรณ์: SELECT 'sequence_name'.NEXTVAL FROM DUAL

สิ่งนี้จะคืนค่าคอลัมน์หนึ่งคอลัมน์ (ชื่อคอลัมน์ NEXTVAL)


1
นั่นไม่จำเป็นตั้งแต่ 11g ลำดับสามารถใช้งานได้ใน PL / SQL
Jon Heller

0

อีกสถานการณ์ที่ต้องการ 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


0

DUAL เป็นหนึ่งแถวพิเศษตารางหนึ่งคอลัมน์จะมีอยู่ในฐานข้อมูล Oracle ทั้งหมด เจ้าของ DUAL คือ SYS

DUAL เป็นตารางที่สร้างขึ้นโดยอัตโนมัติโดย Oracle Database พร้อมกับฟังก์ชั่นข้อมูล มันมักจะใช้เพื่อรับฟังก์ชั่นระบบปฏิบัติการ (เช่นวันที่เวลาการแสดงออกทางคณิตศาสตร์ ฯลฯ )

SELECT SYSDATE from dual;  
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.