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
이전에는 듀얼이 다른 테이블과 거의 동일하게 작동 한다고 말했습니다 . 그래서, 때 그것은 다른 테이블처럼 작동하지 않는 이유는 무엇입니까?
테이블 자체에서 값을 선택하지 않으면 다르게 작동합니다. 다시 한 번, 귀하의 쿼리를 통해 오라클이 설명 하도록합니다 ...
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
on 임을 알 수 있습니다 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
하지 않으므로 인스턴스가 디스크의 실제 값을 읽지 않도록 조작이 실행됩니다.