Co to jest podwójny stół w Oracle?

229

Słyszałem ludzi odnoszących się do tego stołu i nie byłem pewien, o co chodzi.

Brian G.
źródło
2
asktom.oracle.com/pls/asktom/… szczegóły na temat dual
SriniV
Najlepszą odpowiedzią jest tutaj podwójny asktom.oracle.com/pls/asktom/... , ludzie nie zwracają większej uwagi na powyższy link do komentarza, dlatego tutaj komentuję .. spójrz na to, nie pożałujesz
Varun

Odpowiedzi:

229

Jest to rodzaj fałszywej tabeli z pojedynczym rekordem służącym do wybierania, kiedy nie jesteś zainteresowany danymi, ale zamiast tego chcesz wyniki funkcji systemowej w instrukcji select:

na przykład select sysdate from dual;

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

Sean McMains
źródło
79

To jest stół zastępczy z jednym elementem. Jest to przydatne, ponieważ Oracle nie zezwala na takie instrukcje

 SELECT 3+4

Możesz obejść to ograniczenie, pisząc

 SELECT 3+4 FROM DUAL

zamiast.

MFF
źródło
70

Z Wikipedii

Historia

Tabela DUAL została stworzona przez Chucka Weissa z korporacji Oracle, aby zapewnić tabelę do łączenia w widokach wewnętrznych:

Stworzyłem tabelę DUAL jako podstawowy obiekt w Oracle Data Dictionary. Nigdy nie miał być widziany sam, ale zamiast tego użyty w widoku, który miał być pytany. Pomysł polegał na tym, że można wykonać DOŁĄCZ do tabeli DUAL i utworzyć w wyniku dwa wiersze dla każdego wiersza w tabeli. Następnie, używając GROUP BY, powstałe sprzężenie może być podsumowane, aby pokazać ilość miejsca dla zakresu DATA i zakresu INDEX. Nazwa DUAL wydawała się trafna w procesie tworzenia pary rzędów z jednego. 1

Z powyższego może nie być oczywiste, ale pierwotna tabela DUAL miała w sobie dwa wiersze (stąd jej nazwa). Obecnie ma tylko jeden rząd.

Optymalizacja

DUAL był pierwotnie tabelą, a silnik bazy danych wykonywał operacje dyskowe we / wy na stole podczas wybierania z DUAL. To IO dysku było zwykle logicznym IO (nie wymagającym fizycznego dostępu do dysku), ponieważ bloki dysku były zwykle już buforowane w pamięci. Spowodowało to dużą liczbę logicznych operacji we / wy względem tabeli DUAL.

Późniejsze wersje bazy danych Oracle zostały zoptymalizowane i baza danych nie wykonuje już fizycznych ani logicznych operacji we / wy w tabeli DUAL, mimo że tabela DUAL nadal istnieje.

Ivan Bosnic
źródło
21

Myślę, że ten artykuł na Wikipedii może pomóc wyjaśnić.

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

Tabela DUAL jest specjalną tabelą jednorzędową domyślnie występującą we wszystkich instalacjach baz danych Oracle. Nadaje się do użycia przy wybieraniu pseudokolumny, takiej jak SYSDATE lub USER. Tabela ma jedną kolumnę VARCHAR2 (1) o nazwie DUMMY o wartości „X”

Jorge Ferreira
źródło
10

To specjalny stół w Oracle. Często używam go do obliczeń lub sprawdzania zmiennych systemowych. Na przykład:

  • Select 2*4 from dual wypisuje wynik obliczeń
  • Select sysdate from dual drukuje bieżącą datę serwera.
Martin08
źródło
4

Rodzaj pseudo-tabeli, z którą można uruchamiać polecenia i uzyskiwać wyniki, takie jak sysdate. Pomaga także sprawdzić, czy Oracle działa, i sprawdzić składnię SQL itp.


źródło
4

Tabela narzędzi w Oracle z tylko 1 wierszem i 1 kolumną. Służy do wykonywania szeregu operacji arytmetycznych i może być stosowany ogólnie tam, gdzie trzeba wygenerować znany wynik.

WYBIERZ * Z dual;

da pojedynczy wiersz z jedną kolumną o nazwie „DUMMY” i wartością „X”, jak pokazano tutaj:

DUMMY
----- 
X
AB01
źródło
2

Tabela DUAL jest specjalną tabelą jednorzędową domyślnie występującą we wszystkich instalacjach baz danych Oracle. Jest odpowiedni do użycia przy wybieraniu pseudokolumny, takiej jak SYSDATE lub USER

Tabela ma jedną kolumnę VARCHAR2 (1) o nazwie DUMMY, która ma wartość „X”

Możesz przeczytać o tym wszystko na http://en.wikipedia.org/wiki/DUAL_table

Sakin
źródło
1

DUAL jest niezbędny w rozwoju PL / SQL do używania funkcji, które są dostępne tylko w SQL

na przykład

DECLARE
x XMLTYPE;
BEGIN
SELECT xmlelement("hhh", 'stuff')
INTO x
FROM dual;
END;
steevc
źródło
0

Jest to obiekt do wstawienia z tego zwrotu 1 pusty wiersz. Na przykład: wybierz 1 z podwójnego; zwraca 1

wybierz 21 + 44 z podwójnego; zwraca 65

wybierz [sekwencję] .nextval z podwójnego; zwraca następną wartość z sekwencji.


źródło
0

DUAL używaliśmy głównie do uzyskiwania kolejnej liczby z sekwencji.

Składnia: SELECT 'nazwa_sekwencyjna'. NEXTVAL OD DUAL

Zwróci wartość jednego wiersza i jednej kolumny (nazwa kolumny NEXTVAL).

Vishwa G
źródło
1
To nie jest konieczne, ponieważ 11g. Sekwencje mogą być używane natywnie w PL / SQL.
Jon Heller
0

Inną sytuacją, która wymaga, select ... from dual jest to, kiedy chcemy pobrać kod (definicję danych) dla różnych obiektów bazy danych (takich jak TABELA, FUNKCJA, TRIGGER, PAKIET), używając wbudowanej DBMS_METADATA.GET_DDLfunkcji:

select DBMS_METADATA.GET_DDL('TABLE','<table_name>') from DUAL;

select DBMS_METADATA.GET_DDL('FUNCTION','<function_name>') from DUAL;

jest prawdą, że obecnie IDE oferują możliwość przeglądania DDL tabeli, ale w prostszych środowiskach, takich jak SQL Plus, może to być naprawdę przydatne.

EDYTOWAĆ

bardziej ogólna sytuacja: w zasadzie, kiedy musimy użyć dowolnej procedury PL / SQL w standardowej instrukcji SQL lub gdy chcemy wywołać procedurę z wiersza poleceń:

select my_function(<input_params>) from dual;

oba przepisy pochodzą z książki „Oracle PL / SQL Recipes” autorstwa Josha Juneau i Matt Areny

Wentylator Newtona 01
źródło
0

DUAL to specjalny jeden wiersz, jedna tabela kolumnowa domyślnie obecna we wszystkich bazach danych Oracle. Właścicielem DUAL jest SYS.

DUAL to tabela tworzona automatycznie przez Oracle Database wraz z funkcjami danych. Jest zawsze używany do uzyskania funkcji systemu operacyjnego (takich jak data, godzina, wyrażenie arytmetyczne. Itp.)

SELECT SYSDATE from dual;  
Manjunatha B.
źródło