Các dual
bảng "hoạt động" gần như chỉ là bất kỳ cách nào các công trình bảng khác: nó là một bảng mà từ đó bạn có thể chọn hồ sơ.
Điều này có nghĩa, ví dụ, bạn có thể mô tả bảng. Ở đây, trong SQL*Plus
:
SQL> set lines 50
SQL> desc dual
Name Null? Typ
----------------------- -------- ----------------
DUMMY VARCHAR2(1)
Vì vậy, bảng có một cột, được đặt tên dummy
là a varchar2(1)
.
Bảng này, theo thiết kế, một bản ghi (ít nhất là nếu không có ai chơi với nó):
SQL> select count(*) from dual;
COUNT(*)
----------
1
Vì vậy, để có được hành vi tương tự dual2
như bạn có dual
, bạn phải chèn một bản ghi thành kép. Tốt hơn nữa, tạo nó với một create table as select
(ctas):
SQL> create table dual2 as select * from dual;
Bây giờ, truy vấn của bạn hoạt động:
SQL> select 4*5 from dual2;
4*5
----------
20
Trước đó, tôi đã nói rằng dual gần như hoạt động như bất kỳ bảng nào khác. Vì vậy, khi nó không hoạt động như bất kỳ bảng khác?
Nó hoạt động khác nhau, nếu không có giá trị từ chính bảng được chọn. Một lần nữa, với các truy vấn của bạn, tôi để Oracle giải thích chúng ...
SQL> set lines 150
SQL> explain plan for select 4*5 from dual2;
EXPLAIN PLAN ausgef³hrt.
... Để xem cách truy cập bảng:
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 |
-------------------------------------------------------------------
Có thể thấy rằng tuyên bố thực hiện một full table access
trên dual2
.
Bây giờ, điều tương tự với 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 |
-----------------------------------------------------------------
Đây là nơi dual
bảng hoạt động khác nhau: giá trị của dummy
không cần thiết, do đó, một fast dual
thao tác được thực thi, để cá thể không đọc giá trị thực trên đĩa.