Apakah tabel ganda dalam Oracle?

229

Saya pernah mendengar orang merujuk ke tabel ini dan tidak yakin tentang apa itu.

Brian G
sumber
2
asktom.oracle.com/pls/asktom/… rincian tentang dual
SriniV
Ans terbaik ada di sini tentang dual asktom.oracle.com/pls/asktom/… , orang-orang tidak memberikan perhatian lebih pada tautan komentar di atas itu sebabnya saya berkomentar di sini .. lihat itu, Anda tidak akan menyesal
Varun

Jawaban:

229

Ini semacam tabel dummy dengan satu catatan yang digunakan untuk memilih saat Anda sebenarnya tidak tertarik dengan data, tetapi sebaliknya menginginkan hasil dari beberapa fungsi sistem dalam pernyataan pilih:

misalnya select sysdate from dual;

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

Sean McMains
sumber
79

Ini adalah meja boneka dengan satu elemen di dalamnya. Ini berguna karena Oracle tidak mengizinkan pernyataan seperti

 SELECT 3+4

Anda dapat mengatasi batasan ini dengan menulis

 SELECT 3+4 FROM DUAL

sebagai gantinya.

mfx
sumber
70

Dari Wikipedia

Sejarah

Tabel DUAL dibuat oleh Chuck Weiss dari perusahaan Oracle untuk menyediakan tabel untuk bergabung dalam pandangan internal:

Saya membuat tabel DUAL sebagai objek mendasar di Kamus Data Oracle. Itu tidak pernah dimaksudkan untuk dilihat sendiri, tetapi digunakan di dalam tampilan yang diharapkan akan ditanyakan. Idenya adalah bahwa Anda bisa melakukan GABUNG ke tabel DUAL dan membuat dua baris di hasilnya untuk setiap satu baris di tabel Anda. Kemudian, dengan menggunakan GROUP BY, gabungan yang dihasilkan dapat diringkas untuk menunjukkan jumlah penyimpanan untuk tingkat DATA dan untuk tingkat INDEX. Nama itu, DUAL, tampaknya cocok untuk proses menciptakan sepasang baris dari satu. 1

Mungkin tidak jelas dari yang di atas, tetapi tabel DUAL asli memiliki dua baris di dalamnya (karenanya namanya). Saat ini hanya memiliki satu baris.

Optimasi

DUAL awalnya adalah sebuah tabel dan mesin database akan melakukan disk IO di atas meja ketika memilih dari DUAL. IO disk ini biasanya IO logis (tidak melibatkan akses disk fisik) karena blok disk biasanya sudah di-cache dalam memori. Ini menghasilkan sejumlah besar IO logis terhadap tabel DUAL.

Versi kemudian dari database Oracle telah dioptimalkan dan database tidak lagi melakukan IO fisik atau logis pada tabel DUAL walaupun tabel DUAL masih benar-benar ada.

Ivan Bosnic
sumber
21

Saya pikir artikel wikipedia ini dapat membantu memperjelas.

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

Tabel DUAL adalah tabel satu-baris khusus yang hadir secara default di semua instalasi basis data Oracle. Sangat cocok untuk digunakan dalam memilih pseudocolumn seperti SYSDATE atau USER Tabel memiliki satu kolom VARCHAR2 (1) yang disebut DUMMY yang memiliki nilai "X"

Jorge Ferreira
sumber
10

Ini tabel khusus di Oracle. Saya sering menggunakannya untuk perhitungan atau memeriksa variabel sistem. Sebagai contoh:

  • Select 2*4 from dual mencetak hasil perhitungan
  • Select sysdate from dual mencetak tanggal server saat ini.
Martin08
sumber
4

Jenis tabel pseudo yang dapat Anda jalankan perintahnya dan dapatkan kembali hasilnya, seperti sysdate. Juga membantu Anda memeriksa apakah Oracle aktif dan memeriksa sintaks sql, dll.


sumber
4

Tabel utilitas di Oracle dengan hanya 1 baris dan 1 kolom. Ini digunakan untuk melakukan sejumlah operasi aritmatika dan dapat digunakan secara umum di mana orang perlu menghasilkan output yang dikenal.

PILIH * DARI dual;

akan memberikan satu baris, dengan satu kolom bernama "DUMMY" dan nilai "X" seperti yang ditunjukkan di sini:

DUMMY
----- 
X
AB01
sumber
2

Tabel DUAL adalah tabel satu-baris khusus yang hadir secara default di semua instalasi basis data Oracle. Sangat cocok untuk digunakan dalam memilih pseudocolumn seperti SYSDATE atau USER

Tabel memiliki kolom VARCHAR2 (1) tunggal yang disebut DUMMY yang memiliki nilai "X"

Anda dapat membacanya di http://en.wikipedia.org/wiki/DUAL_table

Sakin
sumber
1

DUAL diperlukan dalam pengembangan PL / SQL untuk menggunakan fungsi yang hanya tersedia dalam SQL

misalnya

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

Ini adalah objek untuk dimasukkan ke dalam dari yang mengembalikan 1 baris kosong. Misalnya: pilih 1 dari dua; mengembalikan 1

pilih 21 + 44 dari dual; mengembalikan 65

pilih [urutan] .nextval dari dual; mengembalikan nilai berikutnya dari urutan.


sumber
0

DUAL kami terutama digunakan untuk mendapatkan nomor berikutnya dari urutan.

Sintaks: PILIH 'sequence_name'.NEXTVAL DARI DUAL

Ini akan mengembalikan nilai satu baris satu kolom (nama kolom NEXTVAL).

Vishwa G
sumber
1
Itu tidak perlu sejak 11g. Urutan dapat digunakan secara native di PL / SQL.
Jon Heller
0

situasi lain yang mengharuskan select ... from dual adalah ketika kita ingin mengambil kode (definisi data) untuk objek database yang berbeda (seperti TABEL, FUNGSI, PEMICU, PAKET), menggunakan DBMS_METADATA.GET_DDLfungsi bawaan:

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

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

Memang benar bahwa saat ini IDE memang menawarkan kemampuan untuk melihat DDL dari sebuah tabel, tetapi dalam lingkungan yang lebih sederhana seperti SQL Plus ini bisa sangat berguna.

EDIT

situasi yang lebih umum: pada dasarnya, ketika kita perlu menggunakan prosedur PL / SQL di dalam pernyataan SQL standar, atau ketika kita ingin memanggil prosedur dari baris perintah:

select my_function(<input_params>) from dual;

kedua resep tersebut diambil dari buku 'Oracle PL / SQL Recipes' oleh Josh Juneau dan Matt Arena

Penggemar Newton 01
sumber
0

DUAL adalah satu baris khusus, satu tabel kolom hadir secara default di semua database Oracle. Pemilik DUAL adalah SYS.

DUAL adalah tabel yang secara otomatis dibuat oleh Oracle Database bersama dengan fungsi data. Itu selalu digunakan untuk mendapatkan fungsi sistem operasi (seperti tanggal, waktu, ekspresi aritmatika, dll.)

SELECT SYSDATE from dual;  
Manjunatha B
sumber