Qual è la doppia tabella in Oracle?

Ho sentito persone riferirsi a questo tavolo e non ero sicuro di cosa si trattasse.

È una sorta di tabella fittizia con un singolo record utilizzato per la selezione quando non sei realmente interessato ai dati, ma preferisci i risultati di alcune funzioni di sistema in un’istruzione select:

ad esempio select sysdate from dual;

Vedi http://www.adp-gmbh.ch/ora/misc/dual.html

È una tabella fittizia con un elemento in essa. È utile perché Oracle non consente dichiarazioni come

  SELECT 3+4 

Puoi aggirare questa restrizione scrivendo

  SELECT 3+4 FROM DUAL 

anziché.

Da Wikipedia

Storia

Il tavolo DUAL è stato creato da Chuck Weiss della Oracle Corporation per fornire una tabella per l’adesione a viste interne:

Ho creato la tabella DUAL come object sottostante in Oracle Data Dictionary. Non è mai stato concepito per essere visto da solo, ma utilizzato all’interno di una vista che era prevista per essere interrogata. L’idea era che si potesse fare un JOIN alla tabella DUAL e creare due righe nel risultato per ogni riga della tabella. Quindi, utilizzando GROUP BY, il join risultante potrebbe essere riepilogato per mostrare la quantità di memoria per l’estensione DATA e per l’estensione (i) INDICE. Il nome, DUAL, sembrava adatto al processo di creazione di un paio di righe da una sola. 1

Potrebbe non essere ovvio da quanto sopra, ma la tabella DUAL originale aveva due righe (da qui il suo nome). Al giorno d’oggi ha solo una riga.

Ottimizzazione

DUAL era in origine una tabella e il motore di database eseguiva l’I / O del disco sul tavolo quando si selezionava DUAL. Questo I / O del disco era in genere IO logico (che non implicava l’accesso al disco fisico) poiché i blocchi del disco erano solitamente già memorizzati nella cache. Ciò ha comportato una grande quantità di IO logico rispetto alla tabella DUAL.

Le versioni successive del database Oracle sono state ottimizzate e il database non esegue più IO fisico o logico sulla tabella DUAL anche se la tabella DUAL esiste ancora effettivamente.

Penso che questo articolo di Wikipedia possa aiutare a chiarire.

http://en.wikipedia.org/wiki/DUAL_table

La tabella DUAL è una tabella di una riga speciale presente per impostazione predefinita in tutte le installazioni di database Oracle. È adatto per l’uso nella selezione di una pseudocolonna come SYSDATE o USER La tabella ha una singola colonna VARCHAR2 (1) chiamata DUMMY che ha un valore di “X”

È il tavolo speciale di Oracle. Lo uso spesso per i calcoli o per controllare le variabili di sistema. Per esempio:

  • Select 2*4 from dual stampa fuori il risultato del calcolo
  • Select sysdate from dual stampa la data corrente del server.

Una sorta di pseudo-tabella è ansible eseguire comandi contro e ottenere risultati, come ad esempio sysdate. Ti aiuta anche a verificare se Oracle è attivo e controlla la syntax sql, ecc.

Una tabella di utilità in Oracle con solo 1 riga e 1 colonna. È utilizzato per eseguire una serie di operazioni aritmetiche e può essere utilizzato in genere quando è necessario generare un risultato noto.

SELEZIONA * DA doppio;

darà una singola riga, con una singola colonna denominata “DUMMY” e un valore di “X” come mostrato qui:

 DUMMY ----- X 

Maggiori informazioni sul DUAL ….

http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1562813956388

Esperimenti entusiasmanti fatti qui e spiegazioni più entusiasmanti di Tom

La tabella DUAL è una tabella di una riga speciale presente per impostazione predefinita in tutte le installazioni di database Oracle. È adatto per l’uso nella selezione di una pseudocolonna come SYSDATE o USER

La tabella ha una singola colonna VARCHAR2 (1) chiamata DUMMY che ha un valore di “X”

Puoi leggere tutto su di esso in http://en.wikipedia.org/wiki/DUAL_table

DUAL è necessario nello sviluppo PL / SQL per l’utilizzo di funzioni disponibili solo in SQL

per esempio

 DECLARE x XMLTYPE; BEGIN SELECT xmlelement("hhh", 'stuff') INTO x FROM dual; END; 

È un object da inserire nella riga di ritorno 1 vuota. Ad esempio: selezionare 1 da doppio; restituisce 1

seleziona 21 + 44 da doppio; restituisce 65

selezionare [sequenza] .nextval da doppio; restituisce il valore successivo dalla sequenza.

DUAL abbiamo usato principalmente per ottenere il numero successivo dalle sequenze.

Sintassi: SELECT ‘sequence_name’.NEXTVAL FROM DUAL

Ciò restituirà il valore di una riga di una colonna (nome della colonna NEXTVAL).

un’altra situazione che richiede select ... from dual è quando vogliamo recuperare il codice (definizione dei dati) per diversi oggetti di database (come TABLE, FUNCTION, TRIGGER, PACKAGE), usando la funzione built-in DBMS_METADATA.GET_DDL :

 select DBMS_METADATA.GET_DDL('TABLE','') from DUAL; select DBMS_METADATA.GET_DDL('FUNCTION','') from DUAL; 

è vero che oggigiorno gli IDE offrono la possibilità di visualizzare il DDL di una tabella, ma in ambienti più semplici come SQL Plus può essere davvero utile.

MODIFICARE

una situazione più generale: in pratica, quando è necessario utilizzare qualsiasi procedura PL / SQL all’interno di un’istruzione SQL standard o quando si desidera chiamare una procedura dalla riga di comando:

 select my_function() from dual; 

entrambe le ricette sono tratte dal libro ‘Oracle PL / SQL Recipes’ di Josh Juneau e Matt Arena