dualTablo "çalışır" neredeyse başka tablo çalışmaları sadece yol: Eğer kayıtları seçebileceğiniz bir tablodur.
Bu, örneğin, masayı tanımlayabileceğiniz anlamına gelir. Burada SQL*Plus:
SQL> set lines 50
SQL> desc dual
Name Null? Typ
----------------------- -------- ----------------
DUMMY VARCHAR2(1)
Yani, tablonun adı a dummyolan bir sütun vardır varchar2(1).
Tabloda, tasarım gereği, bir kayıt var (en azından kimse anlamadıysa):
SQL> select count(*) from dual;
COUNT(*)
----------
1
Yani, aynı davranışa sahip dual2olmak için dual, ile aynı rekoru ikiye katlamalısınız. Daha da iyisi, bir create table as select(ctas) ile oluşturun:
SQL> create table dual2 as select * from dual;
Şimdi, sorgunuz çalışıyor:
SQL> select 4*5 from dual2;
4*5
----------
20
Daha önce, dual'in neredeyse diğer masalar gibi çalıştığını söyledim . Peki, ne zaman başka bir masa gibi çalışmıyor?
Tablonun kendisinden bir değer seçilmezse, farklı davranır. Yine, sorularınızla Oracle'ın bunları açıklamasına izin verdim ...
SQL> set lines 150
SQL> explain plan for select 4*5 from dual2;
EXPLAIN PLAN ausgef³hrt.
... masaya nasıl erişildiğini görmek için:
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 |
-------------------------------------------------------------------
Deyim bir yaptığı görülebilir full table accessüzerinde dual2.
Şimdi, aynı şey 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 |
-----------------------------------------------------------------
Bu, dualtablonun farklı davrandığı yerdir : değeri dummygerekli değildir, bu nedenle fast dualörneğin diskteki gerçek değeri okumaması için bir işlem gerçekleştirilir.