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
ऑन करता है 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
डिस्क पर वास्तविक मूल्य को नहीं पढ़ने के लिए उदाहरण के लिए, एक ऑपरेशन निष्पादित किया जाता है।