The dual
table "bekerja" hampir hanya cara apapun karya meja lain: itu adalah tabel dari mana Anda dapat memilih catatan.
Ini berarti, misalnya, Anda bisa menggambarkan tabel. Di sini, di SQL*Plus
:
SQL> set lines 50
SQL> desc dual
Name Null? Typ
----------------------- -------- ----------------
DUMMY VARCHAR2(1)
Jadi, tabel tersebut memiliki satu kolom, bernama dummy
yang adalah a varchar2(1)
.
Tabel tersebut memiliki, menurut desain, satu catatan (setidaknya jika tidak ada yang mengotak-atiknya):
SQL> select count(*) from dual;
COUNT(*)
----------
1
Jadi, untuk mendapatkan perilaku yang sama dengan yang dual2
Anda miliki dual
, Anda harus memasukkan satu rekaman menjadi dua. Lebih baik lagi, buat dengan create table as select
(cta):
SQL> create table dual2 as select * from dual;
Sekarang, permintaan Anda berfungsi:
SQL> select 4*5 from dual2;
4*5
----------
20
Sebelumnya, saya mengatakan bahwa dual hampir berfungsi seperti tabel lainnya. Jadi, kapan itu tidak bekerja seperti meja lainnya?
Itu berperilaku berbeda, jika tidak ada nilai dari tabel itu sendiri dipilih. Sekali lagi, dengan pertanyaan Anda, saya biarkan Oracle menjelaskannya ...
SQL> set lines 150
SQL> explain plan for select 4*5 from dual2;
EXPLAIN PLAN ausgef³hrt.
... untuk melihat bagaimana tabel diakses:
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 |
-------------------------------------------------------------------
Dapat dilihat bahwa pernyataan itu tidak full table access
aktif dual2
.
Sekarang, hal yang sama dengan 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 |
-----------------------------------------------------------------
Di sinilah dual
tabel berperilaku berbeda: nilai dummy
tidak diperlukan, sehingga fast dual
operasi dijalankan, agar instance tidak membaca nilai aktual pada disk.