dual
ตาราง "ผลงาน" เกือบเพียงวิธีการใด ๆ งานตารางอื่น ๆ : มันเป็นตารางจากการที่คุณสามารถเลือกระเบียน
ยกตัวอย่างเช่นคุณสามารถอธิบายตารางได้ ที่นี่ในSQL*Plus
:
SQL> set lines 50
SQL> desc dual
Name Null? Typ
----------------------- -------- ----------------
DUMMY VARCHAR2(1)
ดังนั้นตารางมีคอลัมน์หนึ่งชื่อซึ่งเป็นdummy
varchar2(1)
ตารางมีการออกแบบหนึ่งระเบียน (อย่างน้อยถ้าไม่มีใครเล่นกับมัน):
SQL> select count(*) from dual;
COUNT(*)
----------
1
ดังนั้นเพื่อให้ได้พฤติกรรมเดียวกันกับdual2
ที่คุณมีdual
คุณต้องแทรกหนึ่งระเบียนลงในคู่ ดีกว่าสร้างด้วยcreate table as select
(ctas):
SQL> create table dual2 as select * from dual;
ตอนนี้คำถามของคุณใช้งานได้:
SQL> select 4*5 from dual2;
4*5
----------
20
ก่อนหน้านี้ฉันพูดว่า dual เกือบใช้งานได้เหมือนโต๊ะอื่น ดังนั้นเมื่อมันไม่ทำงานเหมือนโต๊ะอื่น ๆ ?
มันทำงานแตกต่างกันหากไม่มีการเลือกค่าจากตาราง อีกครั้งด้วยคำสั่งของคุณฉันให้ Oracle อธิบายพวกเขา ...
SQL> set lines 150
SQL> explain plan for select 4*5 from dual2;
EXPLAIN PLAN ausgef³hrt.
... เพื่อดูวิธีการเข้าถึงตาราง:
SQL> select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------
Plan hash value: 3445655939
-------------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)| Time |
-------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 3 (0)| 00:00:01 |
| 1 | TABLE ACCESS FULL| DUAL2 | 1 | 3 (0)| 00:00:01 |
-------------------------------------------------------------------
จะเห็นได้ว่าคำสั่งไม่ได้เกี่ยวกับfull table access
dual2
ตอนนี้สิ่งเดียวกันกับdual
:
SQL> explain plan for select 4*5 from dual;
EXPLAIN PLAN ausgef³hrt.
SQL> select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
-------------------------------------------------------------------
Plan hash value: 1388734953
-----------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)| Time |
-----------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 2 (0)| 00:00:01 |
| 1 | FAST DUAL | | 1 | 2 (0)| 00:00:01 |
-----------------------------------------------------------------
นี่คือตำแหน่งที่dual
ตารางทำงานแตกต่างกัน: dummy
ไม่จำเป็นต้องใช้ค่าของดังนั้นจึงมีfast dual
การดำเนินการเพื่อที่อินสแตนซ์จะไม่อ่านค่าจริงบนดิสก์