dual
Tablo "ç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 dummy
olan 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 dual2
olmak 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, dual
tablonun farklı davrandığı yerdir : değeri dummy
gerekli değildir, bu nedenle fast dual
örneğin diskteki gerçek değeri okumaması için bir işlem gerçekleştirilir.